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値が大きいこと、負の値であれば小さいことを示します。大文字と小文字は異なる文字として扱われる点に注意し、文字列比較処理を行う際に活用しましょう。
-
C/C++で文字列を数値に変換する方法|sscanf()とstoi()の使い方を解説
この記事では、C/C++において文字列を数値へ変換する方法について詳しく解説します。文字列として入力された数字データを、計算や処理に使える数値型へ変換することは、プログラミングの基本操作の一つです。C/C++では主に以下の2つの方法で文字列から数値への変換が行えます。方法1:sscanf()を使う(C言語スタイル)sscanf()は、標準入力から読み込むscanf()と違い、指定した文字列からフォーマットに従って値を読み取る関数です。C言語から使える伝統的な手法で、C++でも引き続き利用できます。サンプルコード#include<stdio.h> int main(){
-
C/C++で学ぶAA木(AA Tree)とは?基本概念と平衡化操作を徹底解説
AA木(AA Tree)とはコンピュータサイエンスにおいて、AA木(AA Tree)とは、順序付きデータを効率的に格納・検索するために実装された平衡木(バランスドツリー)の一種です。AA木は、赤黒木(Red-Black Tree)の変種として扱われます。赤黒木は二分探索木の一形態であり、要素の追加や削除を効率的にサポートします。赤黒木と大きく異なる点は、AA木では赤いノードを右の子としてのみ追加でき、左の子としては配置できないという制約があることです。この制約により、2-3-4木ではなく2-3木をシミュレートすることになり、その結果、木の保守操作が大幅に簡素化されます。赤黒木の平衡化アルゴリズ