参考代码:#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一样调用就可以了。
具体主函数怎么写就不写了。