C言語では他の言語と異なり「==」演算子による文字列の比較ができません。
C言語の文字列はchar型の配列なので、比較を行った場合には先頭アドレスの値のみ比較(ポインタの比較)がされて、文字列の比較は行われません。
この記事では、C言語の正しい文字の比較をする方法を紹介します。
文字の比較をする方法
C言語で文字の比較を行う場合には、標準関数のstrcmp関数を使用します。
strcmp関数は第一引数と第二引数に比較を行う文字列変数を指定し、戻り値としてその結果を返します。
結果は以下の3パターンで表されます。
- 等しい場合:0
- 第一引数が大きい場合:1
- 第二引数が大きい場合:-1
1 2 3 4 5 6 |
// 比較対象1 char s1[] = "hogehoge"; // 比較対象2 char s2[] = "hagehage"; // 比較 int res = strcmp(s1, s2); |
strcmp関数を自作
strcmp関数の使い方がわかったところで、挙動のさらなる理解を深めるためにstrcmp関数を自作してみます。
先述した通りstrcmp関数は2つの引数を先頭から走査し1文字ずつcharの変数として比較しその結果を返します。
- 引数を先頭から走査
- 差異があれば走査終了
- 比較結果を返却
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
// 自作strcmp int my_strcmp(const char* s1, const char* s2) { // ループ変数 int i = 0; // 先頭から走査 for(; s1[i] != '\0' && s2[i] != '\0'; i++); // s1が大きい場合 if(s1[i] > s2[i]) return 1; // s2が大きい場合 else if(s1[i] < s2[i]) return -1; // 等しい場合 else return 0; } |