1

私はC言語が初めてです。独自の実装を使用して異なる文字列を比較すると、出力として常にゼロになる理由を誰か教えてくださいstrcmp

2 つの文字列を比較する関数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;
    }
4

2 に答える 2

3

等しい文字が見つかるまでループしてから、それらを減算します。もちろん、結果は常に 0 です。

また、ループ内の条件は常に失敗します...文字が等しくない場合、両方をNULにすることはできません。

コードを修正するには、これで十分です。

于 2012-07-09T08:49:57.223 に答える
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);

行く方法になります。

于 2012-07-09T09:31:58.070 に答える