【C言語入門】strcmp関数を完全マスターする5ステップ – Japanシーモア

【C言語入門】strcmp関数を完全マスターする5ステップ

初心者向けにC言語のstrcmp関数を解説する記事のイメージC言語
この記事は約6分で読めます。

 

【サイト内のコードはご自由に個人利用・商用利用いただけます】

このサービスは複数のSSPによる協力の下、運営されています。

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればカスタムコードを使って機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

本記事では、C言語の基本的な関数の1つであるstrcmp関数を、初心者の方でも理解できるように解説します。

詳細な使い方やサンプルコードを通じて、strcmp関数の使い方を完全に理解し、あなた自身のプログラムに適用できるようになることが目標です。

●C言語とstrcmp関数とは

○C言語の基本

C言語は、高性能で汎用性が高く、多くのプラットフォームで利用されているプログラミング言語の一つです。その中でも、C言語の文字列を取り扱うための関数群は非常に重要な役割を果たします。

○strcmp関数の概要

その中でも特に有用なのが、strcmp関数です。

strcmp関数は、2つの文字列を比較するための関数で、同じ文字列か、異なる文字列かを判断する際に頻繁に使用されます。

●strcmp関数の詳細な使い方

○基本的な使い方

strcmp関数は、2つの文字列を比較し、それらが同じであれば0を、異なる場合は0以外の値を返します。

具体的な関数の形は次のようになります。

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

○サンプルコード1:文字列比較の基本

では、次に実際のサンプルコードを見ていきましょう。

このコードではstrcmp関数を使って、2つの文字列を比較しています。

もし同じ文字列であれば、「文字列は同じです」と表示され、異なれば「文字列は異なります」と表示されます。

#include<stdio.h>
#include<string.h>

int main(void){
    char str1[] = "Hello";
    char str2[] = "Hello";

    if(strcmp(str1, str2) == 0){
        printf("文字列は同じです\n");
    }else{
        printf("文字列は異なります\n");
    }

    return 0;
}

このコードを実行すると、「文字列は同じです」と表示されます。

なぜなら、str1とstr2の両方とも”Hello”という同じ文字列を持っているからです。

○サンプルコード2:大文字小文字を区別せず比較する

では、大文字と小文字を区別せずに比較したい場合はどうすればいいでしょうか?

その際はstrcasecmp関数を使用します。

次のサンプルコードでは、strcasecmp関数を使って大文字と小文字を区別せずに2つの文字列を比較しています。

#include<stdio.h>
#include<string.h>

int main(void){
    char str1[] = "Hello";
    char str2[] = "HELLO";

    if(strcasecmp(str1, str2) == 0){
        printf("文字列は同じです\n");
    }else{
        printf("文字列は異なります\n");
    }

    return 0;
}

このコードを実行すると、「文字列は同じです」と表示されます。

大文字と小文字の違いを無視して比較されるためです。

●strcmp関数の応用例

○文字列ソート

□サンプルコード3:文字列のソート

さて、strcmp関数は単純な文字列の比較だけでなく、文字列のソートにも使用することができます。

次のサンプルコードでは、strcmp関数を使用して文字列配列をアルファベット順にソートしています。

#include<stdio.h>
#include<string.h>

#define SIZE 5

void sortStrings(char array[SIZE][50]){
    char temp[50];

    for (int j=0; j<SIZE; j++){
        for (int i=j+1; i<SIZE; i++){
            if (strcmp(array[j], array[i]) > 0){
                strcpy(temp, array[j]);
                strcpy(array[j], array[i]);
                strcpy(array[i], temp);
            }
        }
    }
}

int main(void){
    char array[SIZE][50] = {"Apple", "Banana", "Mango", "Peach", "Grape"};

    sortStrings(array);

    for(int i=0; i<SIZE; i++){
        printf("%s\n", array[i]);
    }

    return 0;
}

このコードを実行すると、果物の名前がアルファベット順に表示されます。

これは、strcmp関数が文字列を比較し、アルファベット順に並べ替える役割を果たしているからです。

○条件分岐による選択

□サンプルコード4:条件分岐によるメニュー選択

また、strcmp関数は条件分岐による選択の際にも有効です。

下記のコードでは、strcmp関数を使ってユーザーの入力と特定の文字列を比較し、それに基づいてプログラムの動作を制御しています。

#include<stdio.h>
#include<string.h>

int main(void){
    char input[50];

    printf("コマンドを入力してください: ");
    scanf("%s", input);

    if(strcmp(input, "START") == 0){
        printf("プログラムを開始します\n");
    }else if(strcmp(input, "STOP") == 0){
        printf("プログラムを停止します\n");
    }else{
        printf("未知のコマンドです\n");
    }

    return 0;
}

このコードを実行し、「START」や「STOP」を入力すると、それぞれ対応するメッセージが表示されます。

これは、strcmp関数が入力された文字列と定められた文字列を比較し、それに応じた動作を行うためです。

●strcmp関数の注意点と対処法

○注意点

strcmp関数を使用する際の重要な注意点としては、比較する2つの文字列は終端文字(‘\0’)で終わっている必要があります。

終端文字がないと、予期せぬ結果を生む可能性があります。

○対処法

この問題を解決するためには、文字列を扱う際は必ず終端文字を含めるようにしましょう。

また、文字列を入力する際には、バッファオーバーフローを避けるために、入力可能な文字数に注意することも大切です。

まとめ

以上、C言語のstrcmp関数についての詳細な解説を行いました。

strcmp関数はC言語における非常に重要な関数であり、その理解と正確な使用はあなたのプログラミングスキルを向上させます。

本記事があなたの学習に役立ったなら幸いです。

引き続き、C言語の他の関数についても学んでいきましょう。