0

C : 2 つの文字配列を比較する

これが私の腐敗関数です

int my_rot13(int c) {
    if ('a' <= tolower(c) && tolower(c) <= 'z')
        return tolower(c)+13 <= 'z' ? c+13 : c-13;
    return c;
}

int my_rot13cmp(char *a, char *b) {
    int i;
    for (i=1; i<strlen(a); i++) {
        if (my_rot13(a[i]) > my_rot13(b[i])) {
            return 1;
        }
    }
    return -1;
}

D はデコードされた文字で Q になるため、これは 1 を出力する必要があります W はデコードされた文字で J となり、Q > J になります。

printf("%d \n", my_rot13cmp("\0D\n", "\0W\n"));

しかし、これは私に-1を与え続けます

この 2 つの文字を比較する正しい方法は何ですか?

4

2 に答える 2

3

文字列に 0 文字が埋め込まれています。

 my_rot13cmp("\0D\n", "\0W\n");

これにより、strlen(a)my_rot13cmp 内で 0 が返されます。これは、ヌル文字が文字列の末尾を意味するためです。

文字列内の \0 を削除し、ループを開始しますi=0

于 2013-10-30T22:16:50.627 に答える