C言語の基礎「文字列を比較する(strcmp関数)」

スポンサーリンク
C言語

前回に続いて、文字列を扱うライブラリ関数をさらにご紹介していく。

文字列が同じかどうかを比較するには、strcmp関数を利用する。

strcmp
ヘッダ#include <string.h>
形式int strcmp(const char *s1,const char *s2);
説明s1が指す文字列とs2が指す文字列の大小関係の比較を行う。
返却値等しければ0、s1がs2より大きければ正の整数値、s1がs2より小さければ負の整数値を返す。

実際にプログラムで確認してみよう。

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

int main(void)
{
    char s2[128];
    
    puts("\"ABCDE\"との比較をします。");
    puts("\"XXXXX\"で終了します。");
    
    while (1) {
        printf("\n文字列s2:");
        scanf("%s",s2);
        
        if(strcmp(s2,"XXXXX") == 0)
            break;
        printf("strcmp(\"ABCDE\",s2) = %d\n",strcmp("ABCDE",s2));
       
    }

	return 0;
}

実行結果

"ABCDE"との比較をします。
"XXXXX"で終了します。

文字列s2:ABC
strcmp("ABCDE",s2) = 68

文字列s2:ABCD
strcmp("ABCDE",s2) = 69

文字列s2:ABCDE
strcmp("ABCDE",s2) = 0

文字列s2:XXXXX

判定対象の文字数に制限を設けたいときは、strncmp関数を利用する。

strncmp
ヘッダ#include <string.h>
形式int strncmp(const char *s1,const char *s2,size_t n);
説明s1が指す※文字の配列とs2が指す文字の配列の先頭n文字までの大小関係の比較を行う。NULL文字以降の文字は比較しない。
返却値等しければ0、s1がs2より大きければ正の整数値、s1がs2より小さければ負の整数値を返す。
※文字の配列・・s1やs2が指す文字を先頭とするnバイトの領域内にNULL文字がなくてもよい。

実際にプログラムで確認してみよう。

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

int main(void)
{
    char s2[128];
    
    puts("\"ABCDE\"との比較をします。");
    puts("\"XXXXX\"で終了します。");
    
    while (1) {
        printf("\n文字列s2:");
        scanf("%s",s2);
        
        if(strcmp(s2,"XXXXX") == 0)
            break;
        printf("strncmp(\"ABCDE\",s2,3) = %d\n",strncmp("ABCDE",s2,3));
       
    }

	return 0;
}

実行結果

"ABCDE"との比較をします。
"XXXXX"で終了します。

文字列s2:ABC
strncmp("ABCDE",s2,3) = 0

文字列s2:ABCDE
strncmp("ABCDE",s2,3) = 0

文字列s2:AXCDE
strncmp("ABCDE",s2,3) = -22

文字列s2:XXXXX

等しいと判定されたときに表示される0以外の値は、処理系によって異なる。

(参考文献)「C言語 新版 ゼロからはじめるプログラミング」 三谷 純 (著)‎ 翔泳社、
「新・明解C言語 入門編 第2版 」柴田 望洋 (著) SBクリエイティブ

コメント

タイトルとURLをコピーしました