C言語のstrcmpとは?
strcmp関数は、名前の元である「string compare(文字列比較)」が示すとおり、2つの文字列の内容を比較するために使用されるC言語の標準ライブラリ関数です。string.hヘッダーファイルに定義されており、文字列の等価性や辞書順(アルファベット順)での前後関係を判断できます。
strcmp関数はプログラム内で、2つの文字列を先頭から1文字ずつ比較していき、異なる文字が見つかった時点で、それらのASCIIコードの差を返します。また、両方の文字列が完全一致する場合は0を返す形です。第一引数の文字列が第二引数より辞書順で前にあるときは負の値、後ろにある場合は正の値を返します。
strcmp関数を使ううえでの重要ポイントは、シンプルな「等しい・等しくない」の判定に加えて、辞書順(アルファベット順)の比較も行える点です。この機能により、文字列のソートや検索といったより高度な文字列操作が可能となります。
また、strcmp関数は、文字列の終端(ヌル文字 '\0')までの比較を行えるため、文字列全体の等価性を確認するうえでも役立つでしょう。
初心者がプログラミングをする際には、C言語では文字列を直接「==」演算子で比較できない点に注意してください。「==」演算子は文字列の内容ではなく、ポインタの値(メモリアドレス)を比較する役割を持ちます。通常の「等しい・等しくない」の判定では、期待した結果が得られません。
こうした理由から、C言語プログラムで文字列比較をする際には、strcmp関数を使うことが必須となります。
基本構文
strcmp関数の基本構文は非常にシンプルです。string.hヘッダーファイルをインクルードしたあと、以下のように使用します。
strcmp関数は、2つの文字列ポインタを引数に取ったうえで、比較結果を整数値として返します。ここで重要となるのは、返り値の解釈です。
strcmp関数の使用時に文字列が完全一致する場合は、「0」を返します。第一引数の文字列が第二引数よりも辞書順で前にあるときは「負の値」、後方にある場合は「正の値」を返す仕組みです。
strcmp関数を使う際には、戻り値の仕組みを理解することで、単純な等価性チェックに加えて、文字列の順序関係も判断できるようになります。実際のプログラミングでは、主に条件分岐での同値判定や、文字列のソート処理などで活用されることが多いでしょう。
実用例
このセクションでは、動物の名前を使ったわかりやすいシナリオのなかで、strcmp関数の基本的な使い方や応用例、コードパターンを紹介します。
strcmp関数は、文字列比較をする特徴から、さまざまなシーンで活用される汎用性が高い関数です。
開発現場で適材適所の実装を迅速に行えるようになるためには、初心者のうちに自分のプログラミング内で幅広いコードパターンに触れる経験が必要となります。
strcmp関数の入ったコードを実際に動かすと、初心者にとっては難しい戻り値の仕組みなども、徐々に理解できてくるでしょう。
このセクションで紹介するコードパターンは、どれも自分のプログラム上に貼り付けられるものばかりです。コード例をたくさん活用しながら、C言語の文字列比較を早めにマスターしてみてください。
基本的な文字列比較
strcmp関数の最も基本的な使用法は、2つの文字列が等しいかどうかを判断することです。以下のコードパターンでは、2つの動物の名前を比較したうえで、結果を表示しています。strcmp関数が0を返した場合、文字列は同一であることを意味するでしょう。
出力結果:
dogとdogは同じです
戻り値の活用方法
strcmp関数は、単に「文字列が等しいかどうか?」だけでなく、文字列の順序関係も教えてくれる関数です。関数の戻り値が負の場合は最初の文字列が「2番目より前」、正の場合は「後ろ」にあることを示します。
出力結果:
strcmp("giraffe", "elephant") = 127
条件分岐での使用例
strcmp関数には、条件分岐と組み合わせることで、ユーザー入力に基づく異なる処理を実行できる特徴もあります。以下のコードパターンでは、入力された動物の種類によって異なるメッセージを表示しています。
出力結果:
Cats are independent animals.
文字列配列のソート
strcmp関数の戻り値を利用すると、文字列の配列をアルファベット順(辞書順)にソートすることが可能です。以下のコードパターンは、動物の名前の配列をバブルソートの一部として示すものです。バブルソートは、未整列の列に対して左側から順番に隣り合うデータを比較し、順序が間違っていた場合に交換・整列をする仕組みになります。
出力結果:
KoalaはElephantより辞書順で後ろにあります
大文字小文字の区別
strcmp関数には、大文字と小文字を区別する特徴があります。この区別が意図する動作であれば問題ありません。一方で、大文字小文字を区別せずに単純比較したい場合は注意が必要です。
出力結果:
strcmp("tiger", "Tiger") = 128
ユーザー入力の検証
strcmp関数は、ユーザーからの入力内容の検証でも役立ちます。以下のコードパターンで示しているのは、パスワード検証の簡単な事例です。
出力結果:
パスワードが正しいです
エラー処理との組み合わせ
strcmp関数と条件分岐の組み合わせは、エラー処理を実装でも役立ちます。以下のコードパターンでは、特定の動物名が見つからない場合のエラーメッセージを表示しています。
出力結果:
エラー: lionが見つかりません
実際のアプリケーションでの応用
実際のアプリケーション開発において、strcmp関数は、メニュー選択やコマンド解析といったさまざまな場面で使用されています。以下のコードパターンで示したシンプルなメニュー選択も、開発現場でよく用いられるstrcmp関数の代表的な使用例でしょう。
出力結果:
Show raccoon
まとめ
strcmp関数は、C言語で文字列の等価性や順序を比較するために必須の関数です。
この関数を使うと、シンプルに文字列が同じかどうかを判断できることに加えて、辞書順の比較や文字列のソートといった幅広い文字列操作を行えます。
strcmp関数を活用して、より柔軟で効率的な文字列処理をするためには、この関数の戻り値(0、正の値、負の値)を正しく理解することが大切です。
strcmp関数は、実際のアプリケーション開発の現場において、ユーザー入力の検証、メニュー選択、条件分岐といった多くのシーンで使われています。ただし、strcmp関数には、大文字・小文字を区別する特徴があるため、注意が必要です。
C言語プログラミングで文字列操作の幅を活用する場合は、strcmp関数の特性をしっかりと把握するとよいでしょう。