参考代码:
#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语言程序设计教程(第三版)课后习题12.6 (C语言代码)浏览:816 |
A+B for Input-Output Practice (IV) (C语言代码)浏览:551 |
简单的a+b (C语言代码)浏览:564 |
C语言考试练习题_排列 (C语言代码)浏览:767 |
C语言程序设计教程(第三版)课后习题6.9 (C语言代码)浏览:806 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:485 |
WU-格式化数据输出 (C语言代码)浏览:1818 |
WU-陶陶摘苹果2 (C++代码)浏览:1018 |
三角形 (C语言代码)浏览:965 |
完数 (C语言代码)浏览:757 |