参考代码:
#include<stdio.h> #include<string.h> #define maxn 10005 int main(){ char a[maxn],b[maxn]; scanf("%s %s",a,b); printf("%d",strcmp(a,b)); return 0; }
好了写完了,拜拜....
诶诶你们干什么???
你们干啥啊????
不要打我啊~~~
啊........ヽ(*。>Д<)o゜
咳咳。。!
好了正经一点发点点东西吧。
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 < 0) ret = -1; 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 < *(unsigned char*)str2 ) 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<*b){ return -1; }else{ return 0; } }
用的时候直接像strcmp一样调用就可以了。
具体主函数怎么写就不写了。
0.0分
7 人评分
大小写转换 (C语言代码)浏览:839 |
C语言考试练习题_排列 (C语言代码)浏览:719 |
C语言训练-尼科彻斯定理 (C语言代码)浏览:463 |
2005年春浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:582 |
C语言程序设计教程(第三版)课后习题10.3 (C语言代码)浏览:526 |
C语言程序设计教程(第三版)课后习题9.3 (C语言代码)浏览:668 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:756 |
字符逆序 (C语言代码)浏览:504 |
C语言程序设计教程(第三版)课后习题8.3 (C语言代码)浏览:455 |
汽水瓶 (C语言代码)浏览:530 |