码迷,mamicode.com
首页 > 编程语言 > 详细

C语言::模拟实现strcmp函数

时间:2016-08-14 12:56:59      阅读:379      评论:0      收藏:0      [点我收藏+]

标签:strcmp   strcmp函数   strcmp函数实现   strcmp函数功能   strcmp函数参数   strcmp函数返回值   strcmp函数原型   strcmp函数用法   strcmp函数实例   模拟实现strcmp函数   C语言   

题目要求

编写一个C语言程序模拟实现strcmp函数.

(我们依然先模拟实现strcmp函数,然后再对照string.h库中strcmp函数的实现,对比与大师之间的差距.)

算法分析

通过上一篇文章:C语言::strcmp函数功能、原型、用法及实例我们获得了strcmp函数的如下信息:

strcmp原型:int strcmp( const char *s1, const char *s2 );

strcmp功能:将两个字符串自左向右逐个字符进行相比(根据ASCII值大小),直到出现不同的字符或遇’\0’为止.

strcmp返回值:s1>s2 返回值>0、s1<s2 返回值<0、s1=s2 返回值=0

我们了解strcmp函数大体信息之后,不难分析出模拟实现strcmp函数的算法.

算法总结

循环遍历s2,与s1进行比较.若相等,继续进行下一个字符的比较;否则,返回s1所指向内容-s2所指向内容

模拟实现核心代码

//模拟实现strcmp函数
int my_strcmp(const char *s1, const char *s2){
	//对s1进行断言
	assert(s1);
	//对s2进行断言
	assert(s2);
	//当s1所指向的值与s2所指向值相等
	//且s2所指向的值并不是\0时进入循环
	while(!(*s1-*s2)&&*s2){
		s1++;
		s2++;
	}
	return *s1-*s2;
}

string.h库核心代码

//string.h库中strcmp函数核心代码
int __cdecl strcmp(const char *s1,const char *s2){
    int ret = 0;
    while(!(ret = (*(unsigned char*)s1 - *(unsigned char*)s2)) && *s1){
        ++s1,++s2;
    }
    if(ret<0){
        ret = -1;
    }
    if(ret>0){
        ret = 1;
    }
    return (ret);
}

完整测试代码

/*
*本代码由高小调原创,版权归高小调博客所有 
*作者:高小调
*日期:2016-8-9
*代码功能:模拟实现strcmp函数
*集成开发环境:Microsoft Visual Studio 2010 
*/
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
//模拟实现strcmp函数
int my_strcmp(const char *s1, const char *s2){
	//对s1进行断言
	assert(s1);
	//对s2进行断言
	assert(s2);
	//当s1所指向的值与s2所指向值相等
	//且s2所指向的值并不是\0时进入循环
	while(!(*s1-*s2)&&*s2){
		s1++;
		s2++;
	}
	return *s1-*s2;
}
//string.h库中strcmp函数核心代码
int __cdecl strcmp(const char *s1,const char *s2){
    int ret = 0;
    while(!(ret = (*(unsigned char*)s1 - *(unsigned char*)s2)) && *s1){
        ++s1,++s2;
    }
    if(ret<0){
        ret = -1;
    }
    if(ret>0){
        ret = 1;
    }
    return (ret);
}
int main(){
    //某日,中国人、美国人、印度人、日本人一起旅游
    //不小心走到一片荒芜之地,遇到了食人族酋长
    //酋长说比中国人...短的人留下当作我的晚餐!
    char Chinese[]="我18cm";
    char American[]="我19cm";
    char Indian[]="我18cm";
    char Japanese[]="我15cm";
    //你猜是谁?
    printf("裁决之镰:最终输出小于0的人将会被食人族吃掉!\n");
    printf("American:%d\n",my_strcmp(American,Chinese));
    printf("Indian:%d\n",my_strcmp(Indian,Chinese));
    printf("Japanese:%d\n",my_strcmp(Japanese,Chinese));
    system("pause");
    return 0;
}

输出

模拟实现strcmp函数输出结果

    函数列表
  1. printf()函数功能、原型、用法和实例
  2. assert()宏功能、原型、用法和实例
  3. strcmp()函数功能、原型、用法及实例

小调祝你一切安好.

本文由高小调博客原创!

原文地址:http://gaoxiaodiao.com/p/23.html

如欲转载,请注明出处!

C语言::模拟实现strcmp函数

标签:strcmp   strcmp函数   strcmp函数实现   strcmp函数功能   strcmp函数参数   strcmp函数返回值   strcmp函数原型   strcmp函数用法   strcmp函数实例   模拟实现strcmp函数   C语言   

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
站长高小调
加入时间:2016-07-21
  关注此人  发短消息
文章分类
站长高小调”关注的人------(0
站长高小调”的粉丝们------(0
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!