Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C言語のstrcmp()関数とは?文字列比較の基本と使い方を徹底解説

C言語の標準ライブラリ関数 int strcmp(const char *str1, const char *str2) は、ポインタ str1 が指し示す文字列と、str2 が指し示す文字列を比較するための関数です。

C言語において、文字型の配列は「文字列」と呼ばれます。まずは文字列の基本的な扱い方から確認していきましょう。

文字列の宣言

文字列(文字配列)の宣言は以下のように行います。

char stringname [size];

例えば、char string[50]; と宣言すれば、最大50文字の長さを持つ文字列を格納できます。

文字列の初期化

文字列の初期化には、主に次の2つの方法があります。

  • 1文字ずつ文字定数で初期化する方法:
char string[10] = { 'H', 'e', 'l', 'l', 'o', '\0' };
  • 文字列定数を使って初期化する方法:
char string[10] = "Hello";

アクセス方法: 文字列を読み込む際には、制御文字列「%s」を使用します。「%s」は終端文字 '\0' に到達するまで文字列を読み込みます。

strcmp()関数とは

  • 2つの文字列を比較するための関数です。

  • 戻り値として、両文字列の中で最初に一致しなかった文字同士のASCIIコードの差分を返します。

文字列比較の構文

strcmp()関数の構文は以下の通りです。

int strcmp (string1, string2);

戻り値の判定基準は次のようになります。

  • 差が0の場合 → string1 = string2(2つの文字列は等しい)
  • 差が正の値の場合 → string1 > string2(string1の方が大きい)
  • 差が負の値の場合 → string1 < string2(string1の方が小さい)

サンプルプログラム1

次のプログラムは、strcmp()関数の基本的な使い方を示したものです。

#include<stdio.h>
main ( ){
    char a[50], b[50];
    int d;
    printf ("enter 2 strings:\n");
    scanf ("%s %s", a, b);
    d = strcmp (a, b);
    if (d == 0)
        printf("%s is equal to %s", a, b);
    else if (d > 0)
        printf("%s is greater than %s", a, b);
    else if (d < 0)
        printf("%s is less than %s", a, b);
}

実行結果

上記のプログラムを実行すると、以下のような結果が出力されます。

enter 2 strings:
bhanu
priya
bhanu is less than priya

この例では、「bhanu」と「priya」を比較しており、先頭の文字 'b' と 'p' のASCIIコードの差が負になるため、「bhanu is less than priya」と表示されています。

サンプルプログラム2

続いて、strcmpライブラリ関数を使って2つの文字列を比較する別のCプログラムを見てみましょう。

プログラム例

#include<stdio.h>
#include<string.h>
void main(){
    //2つの文字列を宣言//
    char string1[25], string2[25];
    int value;
    //文字列1と文字列2を読み込む//
    printf("Enter String 1: ");
    gets(string1);
    printf("Enter String 2: ");
    gets(string2);
    //ライブラリ関数で比較//
    value = strcmp(string1, string2);
    //条件分岐//
    if(value == 0){
        printf("%s is same as %s", string1, string2);
    }
    else if(value > 0){
        printf("%s is greater than %s", string1, string2);
    }
    else{
        printf("%s is less than %s", string1, string2);
    }
}

実行結果

上記のプログラムを実行すると、以下のような結果が出力されます。

Enter String 1: Tutorials
Enter String 2: Point
Tutorials is greater than Point

この例では、「Tutorials」と「Point」を比較しています。先頭の文字 'T' と 'P' を比較すると、'T' のASCIIコード(84)は 'P' のASCIIコード(80)より大きいため、正の値が返され、「Tutorials is greater than Point」と表示されます。

まとめ

strcmp()関数は、2つの文字列を辞書順(ASCIIコード順)に比較し、その結果を整数値として返す便利な関数です。使用する際は #include<string.h> を忘れずに記述しましょう。戻り値が0かどうかを判定することで文字列の一致確認ができ、正負の判定によって大小関係も把握できます。文字列処理を行うCプログラムにおいて非常に頻繁に使われる重要な関数なので、ぜひマスターしておきましょう。

  1. 【C言語】strncpy()関数とは?基本から実践的な使い方まで解説

    strncpy()関数とはC言語の標準ライブラリ関数 char *strncpy(char *dest, const char *src, size_t n) は、srcが指す文字列からdestへ最大n文字をコピーする関数です。もしsrcの長さがnより短い場合は、コピー後のdestの残りの領域がヌルバイト(\0)で埋められます。なお、C言語において文字の配列は「文字列」と呼ばれます。文字列の宣言文字列(文字型配列)の宣言は以下のように行います。char stringname[サイズ];たとえば、char string[50];と記述すれば、最大50文字を格納できる文字列が宣言できます。文字列の

  2. C言語のstrcpy()関数とは?基本構文と使い方をわかりやすく解説

    C言語のライブラリ関数 char *strcpy(char *dest, const char *src) は、src が指し示す文字列を dest にコピーするための関数です。 C言語では、文字の配列のことを「文字列」と呼びます。 文字列の宣言 文字列(文字配列)の宣言は、以下の形式で行います。 char stringname[size]; 例えば char string[50]; と宣言すると、最大50文字の文字列を格納できる配列が確保されます。 文字列の初期化 文字列の初期化には、主に以下の2つの方法があります。 1. 文字定数を使う方法 char string[10] = {H,