C语言 不用strcmp() 实现字符串比较

#include "stdio.h"
main()
{
char str1[20],str2[20];
int i=0,k;
gets(str1);
gets(str2);
while(str1[i])
if(str1[i]!=str2[i]) break;
else i++;
k=str1[i]-str2[i];
if(k==0)
printf("str1=str2\n");
else
if(k>0) printf("str1>str2\n");
else printf("str1<str2\n");
}
其中
while(str1[i])
if(str1[i]!=str2[i]) break;
else i++;
这一步是什么意思?我怎么感觉可有可无呢?哪位高手解释一下。

这句话才是遍历字符串啊。如果没有这句,只用k=str1[i]-str2[i]; 判断的话,只能判断第一个字符(如"a"和"ab"就会判定为相等了)。

while(str1[i]) // 这句话是判断 字符串1 有没有到结尾
if(str1[i]!=str2[i]) break; // 这计划是判断两个字符串的第 i 个字符相不相等,不相等就跳出
else i++; // 如果两个字符串第 i 个字符相等,i 自增,判断下一个字符

如果不明白的话,详细解释下:

跳出这个循环以后,有这几种情况:
①两个字符串长度不相等,如果是str1短,那么在str1结束的位置,while(str1[i])就跳出了循环,这是判断 k=str1[i]-str2[i],肯定是小于0,所以str1 < str2。
②如果str2短,那循环会在str2的结尾处从 if(str1[i]!=str2[i]) break; 跳出,同理判断 k 就行了
③两个字符串长度相等,碰到某个字符不相等被break了,那么最后只要判断 k=str1[i]-str2[i]; 就可以知道谁大谁小了。上述三种都是不相等的情况。
②所有的字符都相等,那么k就是0了,这时候就判定相等。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-12-09
比较字符串中每个字符是否相同
相似回答