C语言编写strcmp函数,我的哪里错了

来源:百度知道 编辑:UC知道 时间:2024/05/10 22:42:07
当字符串相等返回0,前者大返回1,后者大返回-1
这是我写的,输入单个的时候正确,但是比如输入22 22 怎么就不行了
#include<stdio.h>
int strcmp(char *s1,char *s2)
{
do{

if(*s1>*s2) return 1;
if(*s1<*s2) return -1;
if((*s1=='\0')&&(*s2=='\0')) return 0;
s1++;s2++;
}
while((*s1!=*s2)||(*s1=='\0'&&*s2=='\0'));
}
main()
{
int a;
char *s1,*s2,str1[20],str2[20];
gets(str1);gets(str2);
a=strcmp(str1,str2);
printf("%d",a);
}

int strcmp(char *s1,char *s2)
{
do{

if(*s1>*s2) return 1;
if(*s1<*s2) return -1;

s1++;s2++;
}
while((*s1!='\0'&&*s2!='\0')); // 循环条件改下..
if((*s1=='\0')&&(*s2=='\0')) return 0; //循环外判断
}

OK

返回值不严密,假如输入
s1="21a"
s2="11b"
第二圈的while会被越过,此时,返回值是不可预知的。while((*s1!=*s2)||(*s1=='\0'&&*s2=='\0')); 可以改为while (true);
还有if((*s1=='\0')&&(*s2=='\0')) return 0; 应该为
if((*s1=='\0')&&(*s2=='\0')) continue。
某一组字母一样不代表两字串一样,应进入下一圈继续比较。

玩c语言,思想一定要严密。

把 while((*s1!=*s2)||(*s1=='\0'&&*s2=='\0'));
改成 while(1==1);

你那么写是不对的

直接把循环条件改成这样就行了while(1)