C语言::模拟实现strcmp函数 - 高小调博客

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

题目要求

编写一个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

如欲转载,请注明出处!

PS:宿管阿姨太狠了,才9点就把公寓门关了.

还好主角光环附体,正在纠结要不要叫门时,有人帮我叫开了门.

然后我自告奋勇的告诉她:这两天在找房子,明天就搬出去.

看到宿管阿姨满意的笑容,我的心一下子就踏实了下来,至少今晚不会风餐露宿了...

呵呵,学校怕学生假期留校出事,制订了一系列严格的留宿标准,阻挠学生留宿.

导员嫌留宿学生太多,她暑假得留校监管,因此百般刁难申请留宿的学生.

实在想不通为毛宿管还不让多住几天?难道她也有什么难言之隐?

我就欣赏那种假期可以留宿的学校,就佩服学校的那份勇气、胆量及敢于担当的精神!!!

(未完待续...)

上一篇:
下一篇: