読者です 読者をやめる 読者になる 読者になる

strcmp

strcmpは文字列同士を比較し、どちらがASCIIコード順で先か後かを判定する・・・。

Man page of STRCMP

戻り値が負の値の場合は、第1引数の文字列が先、
戻り値が正の値の場合は、第2引数の文字列が先、
戻り値が0の場合は、2つの文字列は等しいと判定する・・・。

判定ロジックの詳細は、動かしながら説明していく・・・。

変数・配列の宣言・・・。

str2は"ABCDE"・・・。
これと入力文字列str1を比較する・・・。
strcmpの戻り値はcompare_resultに格納し、この値によって表示を切り替える・・・。

まず、str1を入力・・・。

strcmpで判定・・・。

compare_resultが負なら、str1 < str2、

compare_resultが正なら、str1 > str2、

どちらでもない場合は、str1 == str2、

というように判定される・・・。

実際にはどんな文字列がどう判定されるのか試してみよう・・・。

たとえば、

$ ./strcmp
str1: B
str1("B") > str2("ABCDE")

strcmpはそれぞれの文字を先頭から比較していく・・・。
この場合、0文字目をみると、str1[0] = 'B', str2[0] = 'A'なので、
str1のほうが大きいということになり、str2が先ということがわかる・・・。

$ ./strcmp
str1: ABA
str1("ABA") < str2("ABCDE")
[bg1@dti-vps-srv93 strcmp]$

途中まで同じ場合は、違いがあったところを比較する・・・。
2文字目が、str1[2] = 'A', str2[2] = 'C'なので、
str2が大きい、つまりstr1が先・・・。

$ ./strcmp
str1: ABCD
str1("ABCD") < str2("ABCDE")

短い方の文字列すべてが一緒の場合、
この場合は、長い文字列が大きいとみなされる・・・。
str2が大きい、つまりstr1が先・・・。

$ ./strcmp
str1: ABCDE
str1("ABCDE") == str2("ABCDE")

全て一緒の場合は、等しいとみなされる・・・。

strcmpは、このようにして文字列同士の関係を表している・・・。

Sample/strcmp.c at master · bg1bgst333/Sample · GitHub