我是C语言的新手。请有人告诉我为什么在使用我自己的strcmp
实现比较不同的字符串时,我总是得到零作为输出?
我写了函数xstrcmp
来比较两个字符串:如果它们相等,那么它返回0;否则,它返回第一个不匹配字符对的ASCII值之间的数值差异。
#include<stdio.h>
int xstrcmp(char*,char*);
int main()
{
int i;
char string1[]="jerry";
char string2[]="ferry";
i=xstrcmp(string1,string2);
printf("difference=%d\n",i);
return 0;
}
int xstrcmp(char*p,char*q)
{
int m;
while(*p!=*q)
{
if((*p=='\0')&&(*q=='\0'))
break;
p++;
q++;
}
m=(*p)-(*q);
return m;
}
答案 0 :(得分:3)
你循环直到找到相等的字符,然后你减去它们 - 所以当然结果总是为0。
此外,循环内部的条件总是会失败...如果字符不相等,则它们不能都是NUL。
这应该足以让您修复代码。
答案 1 :(得分:0)
你总是得零的原因是你的while循环while(*p!=*q)
意味着只要字符不相同,循环就会执行。
当* p和* q具有相同的值时,将发生循环退出。
因此返回值m=(*p)-(*q);
将始终为零。
while (*p == *q) /* as long as they have same value, loop; otherwise exit */
{
p++; /* increment the pointers */
q++;
}
return (*p)-(*q);
将是要走的路。