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

C/C++のstrcmp()関数の使い方と戻り値を徹底解説

strcmp()関数とは

strcmp()関数は、C言語の標準ライブラリに含まれる組み込み関数で、「string.h」ヘッダーファイルで宣言されています。この関数は、2つの文字列を引数として受け取り、それらを比較するために使用されます。

strcmp()は文字列を辞書順(レキシコグラフィカル順)で比較します。つまり、両方の文字列を先頭から1文字ずつ比較していきます。比較は文字列の最初の文字から始まり、両方の文字が等しい間、またはNULL文字('\0')が見つかるまで続けられます。

両方の文字列の最初の文字が等しい場合は、次に2番目の文字を比較し、以降も同様に処理が続けられます。このプロセスは、NULL文字が見つかるか、等しくない文字が見つかるまで繰り返されます。

strcmp()の構文

C言語におけるstrcmp()の構文は以下の通りです。

int strcmp(const char *leftStr, const char *rightStr);

戻り値の3つのパターン

strcmp()関数は、比較結果に基づいて以下の3つの異なる値を返します。

1. ゼロ(0)

両方の文字列が完全に同一の場合、ゼロを返します。これは、両方の文字列のすべての文字が同じであることを意味します。

以下は、C言語で両方の文字列が等しい場合のstrcmp()の使用例です。

#include<stdio.h>
#include<string.h>
int main() {
    char str1[] = "Tom!";
    char str2[] = "Tom!";
    int result = strcmp(str1, str2);
    if (result==0)
    printf("Strings are equal");
    else
    printf("Strings are unequal");
    printf("\nValue returned by strcmp() is: %d" , result);
    return 0;
}

出力

Strings are equal
Value returned by strcmp() is: 0

2. ゼロより大きい値(>0)

左側の文字列の比較中の文字のASCII値が、右側の文字列の対応する文字のASCII値より大きい場合、ゼロより大きい値を返します。

以下は、C言語でstrcmp()がゼロより大きい値を返す場合の例です。

#include<stdio.h>
#include<string.h>
int main() {
    char str1[] = "hello World!";
    char str2[] = "Hello World!";
    int result = strcmp(str1, str2);
    if (result==0)
    printf("Strings are equal");
    else
    printf("Strings are unequal");
    printf("\nValue returned by strcmp() is: %d" , result);
    return 0;
}

出力

Strings are unequal
Value returned by strcmp() is: 32

この例では、小文字の「h」(ASCII値:104)が大文字の「H」(ASCII値:72)よりもASCII値が大きいため、その差である32が返されています。

3. ゼロより小さい値(<0)

左側の文字列の比較中の文字のASCII値が、右側の文字列の対応する文字のASCII値より小さい場合、ゼロより小さい値を返します。

以下は、C言語におけるstrcmp()の具体例です。

#include<stdio.h>
#include<string.h>
int main() {
    char leftStr[] = "Hello World!";
    char rightStr[] = "hello World!";
    int result = strcmp(leftStr, rightStr);
    if (result==0)
    printf("Strings are equal");
    else
    printf("Strings are unequal");
    printf("\nValue returned by strcmp() is: %d" , result);
    return 0;
}

出力

Strings are unequal
Value returned by strcmp() is: -32

この例では、大文字の「H」(ASCII値:72)が小文字の「h」(ASCII値:104)よりもASCII値が小さいため、-32が返されています。

まとめ

strcmp()関数は、2つの文字列を辞書順に比較するための標準ライブラリ関数です。戻り値が0であれば文字列は等しく、正の値であれば左側の文字列の文字のASCII値が大きいこと、負の値であれば小さいことを示します。大文字と小文字は異なる文字として扱われる点に注意し、文字列比較処理を行う際に活用しましょう。

  1. C/C++で文字列を数値に変換する方法|sscanf()とstoi()の使い方を解説

    この記事では、C/C++において文字列を数値へ変換する方法について詳しく解説します。文字列として入力された数字データを、計算や処理に使える数値型へ変換することは、プログラミングの基本操作の一つです。C/C++では主に以下の2つの方法で文字列から数値への変換が行えます。方法1:sscanf()を使う(C言語スタイル)sscanf()は、標準入力から読み込むscanf()と違い、指定した文字列からフォーマットに従って値を読み取る関数です。C言語から使える伝統的な手法で、C++でも引き続き利用できます。サンプルコード#include<stdio.h> int main(){  

  2. C/C++で学ぶAA木(AA Tree)とは?基本概念と平衡化操作を徹底解説

    AA木(AA Tree)とはコンピュータサイエンスにおいて、AA木(AA Tree)とは、順序付きデータを効率的に格納・検索するために実装された平衡木(バランスドツリー)の一種です。AA木は、赤黒木(Red-Black Tree)の変種として扱われます。赤黒木は二分探索木の一形態であり、要素の追加や削除を効率的にサポートします。赤黒木と大きく異なる点は、AA木では赤いノードを右の子としてのみ追加でき、左の子としては配置できないという制約があることです。この制約により、2-3-4木ではなく2-3木をシミュレートすることになり、その結果、木の保守操作が大幅に簡素化されます。赤黒木の平衡化アルゴリズ