【C言語】 char型の文字・数値を比較する方法を解説

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)となる

そのため、文字列を比較する場合には、事前に大文字・小文字を統一しないといけないときがあるので気をつけましょう。

目次