前回に続いて、文字列を扱うライブラリ関数をさらにご紹介していく。
文字列が同じかどうかを比較するには、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より小さければ負の整数値を返す。 |
実際にプログラムで確認してみよう。
#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クリエイティブ
コメント