C 言語で文字列を比較する
胡金庫
2023年10月12日
-
関数
strcmp
を使って文字列を比較する -
関数
strncmp
を用いて文字列の特定の部分のみを比較する -
関数
strcasecmp
とstrncasecmp
を用いて、大文字小文字を無視して文字列を比較する
この記事では、C 言語で文字列を比較する方法について複数の方法を紹介します。
関数 strcmp
を使って文字列を比較する
関数 strcmp
は <string.h>
ヘッダで定義されている標準ライブラリ機能です。C スタイルの文字列は、\0
シンボルで終わる文字列であるため、関数は各文字を繰り返し比較しなければならません。
strcmp
は 2つの文字列を受け取り、比較の結果を表す整数を返します。返される数値は、最初の文字列が 2 番目の文字列よりも辞書的に小さければ負の値、後者の文字列が前者よりも小さければ正の値、2つの文字列が同じなら 0
です。
以下の例では、関数の戻り値を反転させて ?:
条件文に挿入し、対応する出力をコンソールに出力していることに注意してください。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
const char* str1 = "hello there 1";
const char* str2 = "hello there 2";
const char* str3 = "Hello there 2";
!strcmp(str1, str2) ? printf("strings are equal\n")
: printf("strings are not equal\n");
!strcmp(str1, str3) ? printf("strings are equal\n")
: printf("strings are not equal\n");
exit(EXIT_SUCCESS);
}
出力:
strings are not equal
strings are not equal
関数 strncmp
を用いて文字列の特定の部分のみを比較する
strncmp
は <string.h>
ヘッダで定義されているもう一つの便利な関数であり、文字列の先頭から数文字だけを比較するのに利用することができます。
strncmp
は整数型の第 3 引数を取り、両方の文字列の中で比較する文字数を指定します。この関数の戻り値は strcmp
が返す値と似ています。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
const char* str1 = "hello there 1";
const char* str2 = "hello there 2";
!strncmp(str1, str2, 5) ? printf("strings are equal\n")
: printf("strings are not equal\n");
exit(EXIT_SUCCESS);
}
出力:
strings are equal
関数 strcasecmp
と strncasecmp
を用いて、大文字小文字を無視して文字列を比較する
関数 strcasecmp
は strcmp
と同様の振る舞いをするが、大文字小文字を区別しないことを除いては strcmp
と同様です。この関数は POSIX に準拠しており、strncasecmp
と同様に複数のオペレーティングシステムで利用することができます。後者のパラメータは、size_t
型の第 3 引数で関数に渡すことができます。
これらの関数の戻り値は条件文の中で直接利用できることに注意してください。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
const char* str1 = "hello there 2";
const char* str3 = "Hello there 2";
!strcasecmp(str1, str3) ? printf("strings are equal\n")
: printf("strings are not equal\n");
!strncasecmp(str1, str3, 5) ? printf("strings are equal\n")
: printf("strings are not equal\n");
exit(EXIT_SUCCESS);
}
出力:
strings are equal
strings are equal
著者: 胡金庫