比较字符串差别算法C语言,[蓝桥杯][算法提高VIP]字符串比较 (C语言代码)C语言版本的水文(o゚v゚)ノ...

参考代码:#include

#include

#define maxn 10005

int main(){

char a[maxn],b[maxn];

scanf("%s %s",a,b);

printf("%d",strcmp(a,b));

return 0;

}

好了写完了,拜拜....

诶诶你们干什么???

你们干啥啊????

不要打我啊~~~

啊........ヽ(*。>Д

咳咳。。!

好了正经一点发点点东西吧。

strcmp是C语言比较两个字符串的比较函数,C++string符号重载之后可以直接用==进行类似判定,这里不说C++,我们来聊聊C语言strcmp的实现吧。

strcmp函数是C/C++中基本的函数,它对两个字符串进行比较,然后返回比较结果,函数形式如下:int strcmp(constchar*str1,constchar*str2);

其中str1和str2可以是字符串常量或者字符串变量,返回值为整形。返回结果如下规定:

①str1小于str2,返回负值或者-1(VC返回-1);

②str1等于str2,返回0;

③str1大于str2,返回正值或者1(VC返回1);

strcmp函数实际上是对字符的ASCII码进行比较,实现原理如下:首先比较两个串的第一个字符,若不相等,则停止比较并得出两个ASCII码大小比较的结果;如果相等就接着比较第二个字符然后第三个字符等等。无论两个字符串是什么样,strcmp函数最多比较到其中一个字符串遇到结束符'/0'为止,就能得出结果。

但是我们需要注意的一些事情有,进行判断的时候需要使用Unsigned char无符号字符型进行判断,这是因为传入的参数为有符号数,有符号字符值的范围是-128~127,无符号字符值的范围是0~255,而字符串的ASCII没有负值,若不转化为无符号数这回在减法实现时出现错误。例如str1的值为1,str2的值为255。

作为无符号数计算时ret=-254,结果为负值,正确作为有符号数计算时ret=2,结果为正值,错误

int strcmp_new(const char* src, const char* dst) {

int ret = 0;

while( !(ret = *(unsigned char*)src - *(unsigned char*)dst) && *dst) {

src ++;

dst ++;

}

if( ret 

else if(ret > 0) ret = 1;

return ret;

}

此外还有一些别的方法,就是不需要ret去计算两者之差,直接取值进行判断int strcmp( const char *str1, const char *str2 ) {

while( (*str1) && ( *str1 == *str2 ) ) {

str1++;

str2++;

}

if( *(unsigned char*)str1 > *(unsigned char*)str2 )

return 1;

else if( *(unsigned char*)str1 

return -1;

else

return 0;

}

当然发现本题目不是很严谨的去考虑符号的问题,对于初学者可以像我这样子解决本题目,那就是变为常规的字符判断,其实与上文的方法是一样的,只不过感觉上简单了一丢丢。int ncmp(char *a,char *b){

while((*a)&&(*a==*b)){

a++;

b++;

}

if(*a>*b){

return 1;

}else if(*a

return -1;

}else{

return 0;

}

}

用的时候直接像strcmp一样调用就可以了。

具体主函数怎么写就不写了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值