有点糊涂
----------------解决方案--------------------------------------------------------
讲解起来是有点长,这个代码是比较精练的了
楼主应该自己编一次(先别看准确的代码),虽然代码可能会比较长,但是能理解了逻辑流程,
这样以后能容易理解一些比较精练的代码
----------------解决方案--------------------------------------------------------
\0的阿斯可码值就是0
----------------解决方案--------------------------------------------------------
呵呵,真有意思。
是这样。循环体结束的条件是字符串s1结束,就是s1[i]==0的时候
你再想想程序能够执行到循环体外就是说明在循环体内至少在0<=i<=strlen(s1)为止是和s2相等的,对吧
然后
if(s2[i]==0) // 这里检查是否字符串s2也结束了,如果结束了就说明,s1和s2长度相等(因为对于相同的i,s1和s2都结束了。)根据上面的条件
//所以一定相等
return 0;
else //这个就表明s2的长度大于s1,长度不一样的字符串肯定是不一样了。
return -1;
----------------解决方案--------------------------------------------------------
以下是引用我不是郭靖在2006-10-15 21:13:55的发言:
'\0'是字符,它的ASCII码为0.
应该是'\0'是字符结束符,它的ASCII码为0.我承认我错误
----------------解决方案--------------------------------------------------------
int strcmp(char s1[ ] , char s[ ])
{
int i=0;{
while(s1[i]>0){ //这里为什么是s1[i]>0结束循环,不懂
//s1是否结束, 这个方法不太好, 但是C中判断字符串是否结束并没有太好的方法。
if(s1[i]>s2[i])
return 1;
if(s1[i]<s2[i])
return -1;
i++;}
if(s2[i]==0) //这里为什么s2[i]==0时就相等了呢?
// s1已经结束, s2也结束, 因此两个串长度相等,并且内容也相同
return 0;
else
return -1; //这里又为什么呢?
//s2没有到尾部,也就是比s1要长,返回-1,表示s2>s1
}
----------------解决方案--------------------------------------------------------