文字の判定
大文字と小文字の相互変換の項ではtolower
関数、toupper
関数、islower
関数、isupper
関数の説明をしました。
これらはctype.h
をインクルードすることで使用できますが、ctype.h
には他にも文字を処理するための関数が用意されています。
数はそれほど多くないので、ここで紹介します。
引数に指定できる値は全てunsigned char型の範囲(0~255)、またはEOF(-1)のみです。
それ以外の値を指定した場合の動作は未定義です。
また、戻り値はすべてint型です。
英数字の判定
isalpha
関数は、文字が英字(アルファベット)ならば0以外を返します。
英字以外ならば0を返します。
isdigit
関数は、文字が数字ならば0以外を返します。
数字以外ならば0を返します。
isalnum
関数は、文字が英数字ならば0以外を返します。
英数字以外ならば0を返します。
#include <stdio.h>
#include <ctype.h>
int main()
{
printf("isalpha\n");
printf("%c : %d\n", 'A', isalpha('A'));
printf("%c : %d\n", 'z', isalpha('z'));
printf("%c : %d\n", '3', isalpha('3'));
printf("\nisdigit\n");
printf("%c : %d\n", 'A', isdigit('A'));
printf("%c : %d\n", 'z', isdigit('z'));
printf("%c : %d\n", '3', isdigit('3'));
printf("\nisalnum\n");
printf("%c : %d\n", 'A', isalnum('A'));
printf("%c : %d\n", 'z', isalnum('z'));
printf("%c : %d\n", '3', isalnum('3'));
getchar();
}
isalpha A : 1 z : 2 3 : 0 isdigit A : 0 z : 0 3 : 4 isalnum A : 1 z : 2 3 : 4
is〇〇系の関数は、引数がホニャララか否かを判定する関数です。
戻り値は真なら0以外、偽なら0を返すので、そのままif文等の条件式に使用することができます。
16進数文字の判定
isxdigit
関数は、16進数に使用される文字ならば0以外を返します。
それ以外なら0を返します。
16進数文字とは0~9、a~f、A~Fのいずれかの文字のことです。
printf("%c : %d\n", 'A', isxdigit('A'));
printf("%c : %d\n", 'z', isxdigit('z'));
printf("%c : %d\n", '3', isxdigit('3'));
A : 128 z : 0 3 : 128
制御文字や印字文字の判定
「文字」というのは例えば「ABC」などの人間が読むためのもの以外にも、機械の処理に使用するためのものも含まれます。
これを制御文字と言います。
これに対して英数記号などは印字文字といいます。
isprint
関数は文字が印字文字ならば0以外を返します。
iscntrl
関数が文字が制御文字ならば0以外を返します。
printf("isprint\n");
printf("%c : %d\n", 10, isprint(10));
printf("%c : %d\n", 40, isprint(40));
printf("%c : %d\n", 80, isprint(80));
printf("\niscntrl\n");
printf("%c : %d\n", 10, iscntrl(10));
printf("%c : %d\n", 40, iscntrl(40));
printf("%c : %d\n", 80, iscntrl(80));
isprint : 0 ( : 16 P : 1 iscntrl : 32 ( : 0 P : 0
制御文字を文字で表すことはできないので数値指定しています。
(エスケープ文字には一部の制御文字がある)
このふたつの関数は、一方が真(0以外)ならもう一方は偽(0)となります。
半角スペースは人間が読むためのものなので印字文字ですが、改行(\n)やタブ文字(\t)は制御文字になります。
(英語は単語間にスペースがないと読むことができない)
isgraph
関数は、印字文字から空白を除いた文字の場合に0以外を返します。
これを図形文字といいます。
printf("isprint\n");
printf("%c : %d\n", 'A', isprint('A'));
printf("%c : %d\n", ' ', isprint(' '));
printf("\nisgraph\n");
printf("%c : %d\n", 'A', isgraph('A'));
printf("%c : %d\n", ' ', isgraph(' '));
isprint A : 1 : 64 isgraph A : 1 : 0
空白文字、区切り文字の判定
空白文字とは、半角スペースのほか、水平タブ(\t)、垂直タブ(\v)、改行(\n)、復帰(\r)、書式送り(\f)のことを言います。
区切り文字とは、図形文字のうち英数字以外のもの、つまり記号のことを言います。
isspace
関数は、空白文字の場合に0以外を返します。
isblank
関数は、半角スペースまたはタブ文字の場合に0以外を返します。
ispunct
関数は、区切り文字の場合に0以外を返します。
printf("isspace\n");
printf("%c : %d\n", 'A', isspace('A'));
printf("%c : %d\n", '@', isspace('@'));
printf("%c : %d\n", '\r', isspace('\r'));
printf("%c : %d\n", ' ', isspace(' '));
printf("\nisblank\n");
printf("%c : %d\n", 'A', isblank('A'));
printf("%c : %d\n", '@', isblank('@'));
printf("%c : %d\n", '\r', isblank('\r'));
printf("%c : %d\n", ' ', isblank(' '));
printf("\niispunct\n");
printf("%c : %d\n", 'A', ispunct('A'));
printf("%c : %d\n", '@', ispunct('@'));
printf("%c : %d\n", '\r', ispunct('\r'));
printf("%c : %d\n", ' ', ispunct(' '));
isspace A : 0 @ : 0 : 8 : 8 isblank A : 0 @ : 0 : 0 : 64 ispunct A : 0 @ : 16 : 0 : 0