【C言語】stricmpの使い方:大文字小文字を区別しない文字列比較
C言語で大文字小文字の区別なく文字列を比較するための関数、stricmpの使用法について説明します。
具体的なコード例を通して、実際のプログラム内でどのように利用できるかを分かりやすく解説します。
既に開発環境が整っている場合でも、簡単に手順を追って実践できる内容です。
stricmp関数の基本
stricmp関数の役割と特徴
stricmp関数は、大文字と小文字を区別せずに2つの文字列を比較するために使われる関数です。
C言語の標準ライブラリには含まれていないため、主にWindows環境などで利用される非標準関数となります。
この関数を利用することで、たとえばユーザからの入力で大文字と小文字が混在していても同一の文字列と判断する場合に便利です。
戻り値と比較結果の意味
stricmp関数は、2つの文字列がどれだけ類似しているかを整数値で返します。
具体的には、以下の結果が得られます。
- 返り値が 0 の場合: 両方の文字列が等しいと判断されます。
- 返り値が 0 より小さい場合: 最初の文字列が2番目の文字列よりも小さいと見なされます。
- 返り値が 0 より大きい場合: 最初の文字列が2番目の文字列よりも大きいと見なされます。
このように、比較結果により文字列の大小関係や同一性を判定できるため、検索やソートなどで活用することができます。
基本的な使い方と実装例
関数の構文と引数の解説
stricmp関数の基本的な構文は以下の通りです。
int stricmp(const char *string1, const char *string2);- 第1引数 string1は比較対象となる最初の文字列です。
- 第2引数 string2は比較対象となる2番目の文字列です。
2つの文字列の各文字を大文字小文字を区別せずに比較し、上記の戻り値に従って結果を返します。
サンプルコードの解説
コード内の主要処理とポイント
以下は、stricmp関数を利用したサンプルコードです。
コード内には、主要な処理とそのポイントについて分かりやすいコメントを記述しています。
#include <stdio.h>
#include <string.h>
// main関数からプログラムが開始される
int main() {
    // サンプルの文字列を定義
    const char *string1 = "HelloWorld";  // 比較対象の1つ目の文字列
    const char *string2 = "helloworld";  // 比較対象の2つ目の文字列
    // 大文字と小文字を区別せずに文字列を比較
    int compareResult = stricmp(string1, string2);
    // compareResultの値に応じて結果を出力
    if (compareResult == 0) {
        printf("文字列は等しい\n");
    } else if (compareResult < 0) {
        printf("string1 は string2 より小さい\n");
    } else {
        printf("string1 は string2 より大きい\n");
    }
    return 0;  // プログラム終了
}文字列は等しいこのサンプルでは、2つの文字列が大文字・小文字の違いにも関わらず等しいと判定されることを確認できます。
主要なポイントは以下の通りです。
- stricmp関数によって大文字小文字を区別しない比較を実施。
- 戻り値に基づいて、文字列が等しいか、またはどちらが小さいか大きいかを出力。
- 標準ライブラリの<stdio.h>と<string.h>をインクルードすることで、必要な関数が使用可能になっている点。
プラットフォーム依存性と注意事項
対応環境の違い(Windowsとその他)
stricmp関数は主にWindows環境で利用される非標準関数です。
一方、LinuxやMacなどのUnix系環境では、大文字小文字を区別しない文字列比較を行うためにstrcasecmp関数が利用されることが多いです。
環境によっては、同じ機能を持つこれらの関数が名前や実装に違いがあるため、クロスプラットフォームでの開発を行う際には注意が必要です。
使用時の留意点と代替手段
stricmp関数を使用する際は、以下の点に注意する必要があります。
- 環境依存の関数であるため、コンパイラや実行環境によっては使用できない場合があること。
- クロスプラットフォーム対応が求められる場合、Unix系環境ではstrcasecmp関数を利用するか、条件付きコンパイルを用いて環境ごとに適切な関数を選択する工夫が必要となります。
代替手段として、各環境に合わせた関数呼び出しを行う方法や、自作の大文字小文字を変換して比較する関数を用意する方法も考えられます。
まとめ
この記事では、stricmp関数を利用して大文字小文字を区別せずに文字列を比較する方法とその特徴、戻り値の意味について解説しました。
総括すると、環境依存の関数である点に注意しながら、Windows環境で簡単に大文字小文字の違いを無視した文字列比較が実現できることが理解できました。
ぜひ実際のコードに組み込み、比較処理の実装に挑戦してみてください。
 
![[C言語] atol関数の使い方 – 文字列をlong型数値に変換する](https://af-e.net/wp-content/uploads/2024/10/thumbnail-47138.png)
![[C言語] atof関数の使い方 – 文字列を浮動小数(double)に変換する方法](https://af-e.net/wp-content/uploads/2024/10/thumbnail-47137.png)
![[C言語] sprintf関数の使い方 – 複数の変数を文字列にフォーマット](https://af-e.net/wp-content/uploads/2024/10/thumbnail-47139.png)
![[C言語] sscanf関数の使い方 – フォーマット指定でファイルから読み込む](https://af-e.net/wp-content/uploads/2024/10/thumbnail-47140.png)
![[C言語] strcat 使い方 – 文字列の連結](https://af-e.net/wp-content/uploads/2024/10/thumbnail-47141.png)
![[C言語] strcpy関数の使い方 – 文字列をコピーする](https://af-e.net/wp-content/uploads/2024/10/thumbnail-47144.png)
![[C言語] strcmp関数の使い方 – 文字列を比較する](https://af-e.net/wp-content/uploads/2024/10/thumbnail-47143.png)
![[C言語] strchr関数の使い方 – 最初に見つかった文字の位置を取得](https://af-e.net/wp-content/uploads/2024/10/thumbnail-47142.png)
![[C言語] strncat関数の使い方 – 指定文字分結合](https://af-e.net/wp-content/uploads/2024/10/thumbnail-47148.png)
![[C言語] strlen関数の使い方 – 文字列の長さ(バイト数)の取得](https://af-e.net/wp-content/uploads/2024/10/thumbnail-47147.png)
![[C言語] strcspn関数の使い方 – 文字群が含まれる位置を検索](https://af-e.net/wp-content/uploads/2024/10/thumbnail-47145.png)
![[C言語] strncmp関数の使い方 – 指定文字数だけ比較](https://af-e.net/wp-content/uploads/2024/10/thumbnail-47149.png)