C言語 strcmpの使い方

この記事のポイント

  • 【文字列比較に不可欠】strcmp関数の基本概念
  • 戻り値の意味と正しい解釈方法
  • 大文字小文字を区別する比較の特徴
  • 実用的なコード例とエラー回避テクニック
  • 関連する文字列比較関数との違いと使い分け

目次

C言語のstrcmpとは?

strcmp関数は、名前の元である「string compare(文字列比較)」が示すとおり、2つの文字列の内容を比較するために使用されるC言語の標準ライブラリ関数です。string.hヘッダーファイルに定義されており、文字列の等価性や辞書順(アルファベット順)での前後関係を判断できます。

strcmp関数はプログラム内で、2つの文字列を先頭から1文字ずつ比較していき、異なる文字が見つかった時点で、それらのASCIIコードの差を返します。また、両方の文字列が完全一致する場合は0を返す形です。第一引数の文字列が第二引数より辞書順で前にあるときは負の値、後ろにある場合は正の値を返します。

strcmp関数を使ううえでの重要ポイントは、シンプルな「等しい・等しくない」の判定に加えて、辞書順(アルファベット順)の比較も行える点です。この機能により、文字列のソートや検索といったより高度な文字列操作が可能となります。

また、strcmp関数は、文字列の終端(ヌル文字 '\0')までの比較を行えるため、文字列全体の等価性を確認するうえでも役立つでしょう。

初心者がプログラミングをする際には、C言語では文字列を直接「==」演算子で比較できない点に注意してください。「==」演算子は文字列の内容ではなく、ポインタの値(メモリアドレス)を比較する役割を持ちます。通常の「等しい・等しくない」の判定では、期待した結果が得られません。

こうした理由から、C言語プログラムで文字列比較をする際には、strcmp関数を使うことが必須となります。

【関連】
C言語をもっと詳しく学ぶならpaizaラーニング

基本構文

strcmp関数の基本構文は非常にシンプルです。string.hヘッダーファイルをインクルードしたあと、以下のように使用します。

int strcmp(const char *str1, const char *str2);

strcmp関数は、2つの文字列ポインタを引数に取ったうえで、比較結果を整数値として返します。ここで重要となるのは、返り値の解釈です。

strcmp関数の使用時に文字列が完全一致する場合は、「0」を返します。第一引数の文字列が第二引数よりも辞書順で前にあるときは「負の値」、後方にある場合は「正の値」を返す仕組みです。

strcmp関数を使う際には、戻り値の仕組みを理解することで、単純な等価性チェックに加えて、文字列の順序関係も判断できるようになります。実際のプログラミングでは、主に条件分岐での同値判定や、文字列のソート処理などで活用されることが多いでしょう。

実用例

このセクションでは、動物の名前を使ったわかりやすいシナリオのなかで、strcmp関数の基本的な使い方や応用例、コードパターンを紹介します。

strcmp関数は、文字列比較をする特徴から、さまざまなシーンで活用される汎用性が高い関数です。

開発現場で適材適所の実装を迅速に行えるようになるためには、初心者のうちに自分のプログラミング内で幅広いコードパターンに触れる経験が必要となります。

strcmp関数の入ったコードを実際に動かすと、初心者にとっては難しい戻り値の仕組みなども、徐々に理解できてくるでしょう。

このセクションで紹介するコードパターンは、どれも自分のプログラム上に貼り付けられるものばかりです。コード例をたくさん活用しながら、C言語の文字列比較を早めにマスターしてみてください。

基本的な文字列比較

strcmp関数の最も基本的な使用法は、2つの文字列が等しいかどうかを判断することです。以下のコードパターンでは、2つの動物の名前を比較したうえで、結果を表示しています。strcmp関数が0を返した場合、文字列は同一であることを意味するでしょう。

#include <stdio.h> #include <string.h> int main() { char animal1[] = "dog"; char animal2[] = "dog"; if (strcmp(animal1, animal2) == 0) printf("%sと%sは同じです\n", animal1, animal2); else printf("%sと%sは異なります\n", animal1, animal2); return 0; }

出力結果:

dogとdogは同じです

戻り値の活用方法

strcmp関数は、単に「文字列が等しいかどうか?」だけでなく、文字列の順序関係も教えてくれる関数です。関数の戻り値が負の場合は最初の文字列が「2番目より前」、正の場合は「後ろ」にあることを示します。

#include <stdio.h> #include <string.h> int main() { char animal1[] = "giraffe"; char animal2[] = "elephant"; int result = strcmp(animal1, animal2); printf("strcmp(\"%s\", \"%s\") = %d\n", animal1, animal2, result); return 0; }

出力結果:

strcmp("giraffe", "elephant") = 127

条件分岐での使用例

strcmp関数には、条件分岐と組み合わせることで、ユーザー入力に基づく異なる処理を実行できる特徴もあります。以下のコードパターンでは、入力された動物の種類によって異なるメッセージを表示しています。

#include <stdio.h> #include <string.h> int main() { char animal[50] = "cat"; if (strcmp(animal, "dog") == 0) printf("Dogs are loyal animals.\n"); else if (strcmp(animal, "cat") == 0) printf("Cats are independent animals.\n"); return 0; }

出力結果:

Cats are independent animals.

文字列配列のソート

strcmp関数の戻り値を利用すると、文字列の配列をアルファベット順(辞書順)にソートすることが可能です。以下のコードパターンは、動物の名前の配列をバブルソートの一部として示すものです。バブルソートは、未整列の列に対して左側から順番に隣り合うデータを比較し、順序が間違っていた場合に交換・整列をする仕組みになります。

#include <stdio.h> #include <string.h> int main() { char animals[3][20] = {"Koala", "Elephant", "Giraffe"}; if (strcmp(animals[0], animals[1]) > 0) { printf("%sは%sより辞書順で後ろにあります\n", animals[0], animals[1]); } return 0; }

出力結果:

KoalaはElephantより辞書順で後ろにあります

大文字小文字の区別

strcmp関数には、大文字と小文字を区別する特徴があります。この区別が意図する動作であれば問題ありません。一方で、大文字小文字を区別せずに単純比較したい場合は注意が必要です。

#include <stdio.h> #include <string.h> int main() { char animal1[] = "tiger"; char animal2[] = "Tiger"; printf("strcmp(\"%s\", \"%s\") = %d\n", animal1, animal2, strcmp(animal1, animal2)); return 0; }

出力結果:

strcmp("tiger", "Tiger") = 128

ユーザー入力の検証

strcmp関数は、ユーザーからの入力内容の検証でも役立ちます。以下のコードパターンで示しているのは、パスワード検証の簡単な事例です。

#include <stdio.h> #include <string.h> int main() { char password[] = "penguin"; char input[] = "penguin"; if (strcmp(password, input) == 0) printf("パスワードが正しいです\n"); else printf("パスワードが間違っています\n"); return 0; }

出力結果:

パスワードが正しいです

エラー処理との組み合わせ

strcmp関数と条件分岐の組み合わせは、エラー処理を実装でも役立ちます。以下のコードパターンでは、特定の動物名が見つからない場合のエラーメッセージを表示しています。

#include <stdio.h> #include <string.h> int main() { char animal[] = "hippopotamus"; char target[] = "lion"; if (strcmp(animal, target) != 0) printf("エラー: %sが見つかりません\n", target); return 0; }

出力結果:

エラー: lionが見つかりません

実際のアプリケーションでの応用

実際のアプリケーション開発において、strcmp関数は、メニュー選択やコマンド解析といったさまざまな場面で使用されています。以下のコードパターンで示したシンプルなメニュー選択も、開発現場でよく用いられるstrcmp関数の代表的な使用例でしょう。

#include <stdio.h> #include <string.h> int main() { char command[] = "表示"; if (strcmp(command, "追加") == 0) printf("Fox added\n"); else if (strcmp(command, "表示") == 0) printf("Show raccoon\n"); return 0; }

出力結果:

Show raccoon

まとめ

strcmp関数は、C言語で文字列の等価性や順序を比較するために必須の関数です。

この関数を使うと、シンプルに文字列が同じかどうかを判断できることに加えて、辞書順の比較や文字列のソートといった幅広い文字列操作を行えます。

strcmp関数を活用して、より柔軟で効率的な文字列処理をするためには、この関数の戻り値(0、正の値、負の値)を正しく理解することが大切です。

strcmp関数は、実際のアプリケーション開発の現場において、ユーザー入力の検証、メニュー選択、条件分岐といった多くのシーンで使われています。ただし、strcmp関数には、大文字・小文字を区別する特徴があるため、注意が必要です。

C言語プログラミングで文字列操作の幅を活用する場合は、strcmp関数の特性をしっかりと把握するとよいでしょう。

レベルを更に上げたい方はpaizaプログラミングスキルチェックへ

  1. paizaラーニングトップ
  2. リファレンス
  3. C言語のリファレンス記事一覧
  4. C言語 strcmpの使い方