C言語のstrcmp()関数とは?文字列比較の基本と使い方を徹底解説
C言語の標準ライブラリ関数 int strcmp(const char *str1, const char *str2) は、ポインタ str1 が指し示す文字列と、str2 が指し示す文字列を比較するための関数です。
C言語において、文字型の配列は「文字列」と呼ばれます。まずは文字列の基本的な扱い方から確認していきましょう。
文字列の宣言
文字列(文字配列)の宣言は以下のように行います。
char stringname [size];
例えば、char string[50]; と宣言すれば、最大50文字の長さを持つ文字列を格納できます。
文字列の初期化
文字列の初期化には、主に次の2つの方法があります。
- 1文字ずつ文字定数で初期化する方法:
char string[10] = { 'H', 'e', 'l', 'l', 'o', '\0' };- 文字列定数を使って初期化する方法:
char string[10] = "Hello";
アクセス方法: 文字列を読み込む際には、制御文字列「%s」を使用します。「%s」は終端文字 '\0' に到達するまで文字列を読み込みます。
strcmp()関数とは
2つの文字列を比較するための関数です。
戻り値として、両文字列の中で最初に一致しなかった文字同士のASCIIコードの差分を返します。
文字列比較の構文
strcmp()関数の構文は以下の通りです。
int strcmp (string1, string2);
戻り値の判定基準は次のようになります。
- 差が0の場合 → string1 = string2(2つの文字列は等しい)
- 差が正の値の場合 → string1 > string2(string1の方が大きい)
- 差が負の値の場合 → string1 < string2(string1の方が小さい)
サンプルプログラム1
次のプログラムは、strcmp()関数の基本的な使い方を示したものです。
#include<stdio.h>
main ( ){
char a[50], b[50];
int d;
printf ("enter 2 strings:\n");
scanf ("%s %s", a, b);
d = strcmp (a, b);
if (d == 0)
printf("%s is equal to %s", a, b);
else if (d > 0)
printf("%s is greater than %s", a, b);
else if (d < 0)
printf("%s is less than %s", a, b);
}実行結果
上記のプログラムを実行すると、以下のような結果が出力されます。
enter 2 strings: bhanu priya bhanu is less than priya
この例では、「bhanu」と「priya」を比較しており、先頭の文字 'b' と 'p' のASCIIコードの差が負になるため、「bhanu is less than priya」と表示されています。
サンプルプログラム2
続いて、strcmpライブラリ関数を使って2つの文字列を比較する別のCプログラムを見てみましょう。
プログラム例
#include<stdio.h>
#include<string.h>
void main(){
//2つの文字列を宣言//
char string1[25], string2[25];
int value;
//文字列1と文字列2を読み込む//
printf("Enter String 1: ");
gets(string1);
printf("Enter String 2: ");
gets(string2);
//ライブラリ関数で比較//
value = strcmp(string1, string2);
//条件分岐//
if(value == 0){
printf("%s is same as %s", string1, string2);
}
else if(value > 0){
printf("%s is greater than %s", string1, string2);
}
else{
printf("%s is less than %s", string1, string2);
}
}実行結果
上記のプログラムを実行すると、以下のような結果が出力されます。
Enter String 1: Tutorials Enter String 2: Point Tutorials is greater than Point
この例では、「Tutorials」と「Point」を比較しています。先頭の文字 'T' と 'P' を比較すると、'T' のASCIIコード(84)は 'P' のASCIIコード(80)より大きいため、正の値が返され、「Tutorials is greater than Point」と表示されます。
まとめ
strcmp()関数は、2つの文字列を辞書順(ASCIIコード順)に比較し、その結果を整数値として返す便利な関数です。使用する際は #include<string.h> を忘れずに記述しましょう。戻り値が0かどうかを判定することで文字列の一致確認ができ、正負の判定によって大小関係も把握できます。文字列処理を行うCプログラムにおいて非常に頻繁に使われる重要な関数なので、ぜひマスターしておきましょう。
-
【C言語】strncpy()関数とは?基本から実践的な使い方まで解説
strncpy()関数とはC言語の標準ライブラリ関数 char *strncpy(char *dest, const char *src, size_t n) は、srcが指す文字列からdestへ最大n文字をコピーする関数です。もしsrcの長さがnより短い場合は、コピー後のdestの残りの領域がヌルバイト(\0)で埋められます。なお、C言語において文字の配列は「文字列」と呼ばれます。文字列の宣言文字列(文字型配列)の宣言は以下のように行います。char stringname[サイズ];たとえば、char string[50];と記述すれば、最大50文字を格納できる文字列が宣言できます。文字列の
-
C言語のstrcpy()関数とは?基本構文と使い方をわかりやすく解説
C言語のライブラリ関数 char *strcpy(char *dest, const char *src) は、src が指し示す文字列を dest にコピーするための関数です。 C言語では、文字の配列のことを「文字列」と呼びます。 文字列の宣言 文字列(文字配列)の宣言は、以下の形式で行います。 char stringname[size]; 例えば char string[50]; と宣言すると、最大50文字の文字列を格納できる配列が確保されます。 文字列の初期化 文字列の初期化には、主に以下の2つの方法があります。 1. 文字定数を使う方法 char string[10] = {H,