C 言語で文字列を比較する

胡金庫 2023年10月12日
  1. 関数 strcmp を使って文字列を比較する
  2. 関数 strncmp を用いて文字列の特定の部分のみを比較する
  3. 関数 strcasecmpstrncasecmp を用いて、大文字小文字を無視して文字列を比較する
C 言語で文字列を比較する

この記事では、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

関数 strcasecmpstrncasecmp を用いて、大文字小文字を無視して文字列を比較する

関数 strcasecmpstrcmp と同様の振る舞いをするが、大文字小文字を区別しないことを除いては 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
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

DelftStack.comの創設者です。Jinku はロボティクスと自動車産業で8年以上働いています。自動テスト、リモートサーバーからのデータ収集、耐久テストからのレポート作成が必要となったとき、彼はコーディングスキルを磨きました。彼は電気/電子工学のバックグラウンドを持っていますが、組み込みエレクトロニクス、組み込みプログラミング、フロントエンド/バックエンドプログラミングへの関心を広げています。

LinkedIn Facebook

関連記事 - C String