1

この関数を使用して、大文字と小文字を区別せずに2つの文字列を比較しようとしています。

int strcasecmp(const char *x1, const char *x2);

コピーピースは正しいですが、constは定数であるため、大文字と小文字が区別される部分で問題が発生します。したがって、読み取り専用であり、これらは失敗します。

*x1 = (tolower(*x1)); // toupper would suffice as well, I just chose tolower
*x2 = (tolower(*x2)); // likewise here

両方の文字を残しておく必要がありますconst。そうしないと、これでうまくいくと思います...だから私の質問:char-stringsを保持しながら大文字と小文字を無視する方法はありconstますか?

4

2 に答える 2

2

確かに-あなたはステートメントでtolower正しい結果を比較することができます:if

while (*x1 && *x2 && tolower(*x1) == tolower(*x2)) {
    x1++;
    x2++;
}
return tolower(*x1)-tolower(*x2);
于 2012-07-10T02:16:00.447 に答える
2

一時的なchar変数を使用できます。

char c1 = tolower(*x1);
char c2 = tolower(*x2);

if (c1 == c2)
 ...
于 2012-07-10T02:12:10.473 に答える