char型の値同士を比較する場合、単純に==
や!=
演算子を用いることができますが、その他の比較方法も存在します。
本記事では、char型の値の比較方法について詳しく解説し、サンプルコードを交えながらわかりやすく説明します。
char型の比較方法
C言語において、char型の値を比較する方法はいくつかあります。ここでは、ASCIIコードによる比較、strcmp関数による比較、memcmp関数による比較の3つを紹介します。
ASCIIコードによる比較
char型の値は、実際にはASCIIコードとして表現されます。そのため、2つのchar型の値を比較する場合は、それぞれのASCIIコードを比較することができます。
例えば、以下のようなコードで2つのchar型変数a, bを比較することができます。
if (a < b) {
// aがbよりも小さい場合
} else if (a > b) {
// aがbよりも大きい場合
} else {
// aとbが等しい場合
}
この方法は非常にシンプルでわかりやすいですが、文字列を扱う場合などでは使い勝手が悪くなってしまいます。そこで次に紹介するstrcmp関数やmemcmp関数を使う方が便利です。
strcmp関数による比較
strcmp関数は、2つの文字列を辞書順で比較するための関数です。この関数はstring.h
ヘッダファイルに定義されています。
int strcmp(const char *s1, const char *s2);
この関数は、s1とs2を辞書順で比較し、以下の結果を返します。
- s1 < s2 の場合:負の整数
- s1 > s2 の場合:正の整数
- s1 = s2 の場合:0
例えば、「abc」と「def」をstrcmp関数で比較した場合、
int result = strcmp("abc", "def");
if (result < 0) {
// "abc" < "def" の場合
} else if (result > 0) {
// "abc" > "def" の場合
} else {
// "abc" = "def" の場合
}
という風に判定することができ、ソートプログラムなどに応用できます。
memcmp関数による比較
memcmp関数は、メモリブロック同士をバイト単位で比較するための関数です。この関数もstring.h
ヘッダファイルに定義されています。
int memcmp(const void *s1, const void *s2, size_t n);
この関数は、s1とs2からそれぞれnバイト分だけデータを取り出してバイト単位で大小を比較し、以下の結果を返します。
- s1 < s2 の場合:負の整数
- s1 > s2 の場合:正の整数
- s1 = s2 の場合:0
例えば、「abc」と「abd」をmemcmp関数で比較した場合、
char str1[] = "abc";
char str2[] = "abd";
int result = memcmp(str1, str2, 3);
if (result < 0) {
// "abc" < "abd" の場合
} else if (result > 0) {
// "abc" > "abd" の場合
} else {
// "abc" = "abd" の場合(3バイト目以降は無視される)
}
という風に判定することが出来ます。
char型の比較における注意点
char型の値を比較する際には、大文字と小文字が区別されることに注意が必要です。
例えば、'A'
と'a'
は異なる値として扱われます。
if('A' == 'a') //偽(false)となる
そのため、文字列を比較する場合には、事前に大文字・小文字を統一しないといけないときがあるので気をつけましょう。