文字分類関数
ctype.h ヘッダーファイルでは文字の分類等を行う関数 (Character Classification Functions) が定義されています。
ASCII 文字を前提としたプログラミングでは、例えば c という変数が a から z の間に含まれているかどうか知るためには、 c が 'a' 以上かつ 'z' 以下というようなことを判定すれば十分です。
なぜなら ASCII ではそれらの文字コードが連続していることが前提としてあるからです。
しかし、そうしたコードが書いてあると、例えば EBCDIC などを使う環境では文字コードが連続していないので、期待したように動作しないことになってしまいます。
このため、環境毎の文字種別判定関数などが必要となるわけです。
ctype.h では次のような関数が定義されています。
関数名 | 説明 |
---|---|
isalnum | アルファニューメリック文字かどうかチェックします。 |
isalpha | アルファベットかどうかチェックします。 |
isblank | 空白文字であるかどうかチェックします。 |
iscntrl | 制御文字かどうかチェックします。 |
isdigit | 数字かどうかチェックします。 |
isgraph | 描画可能な文字であるかどうかチェックします。isprint から空白を除く結果になります。 |
islower | 小文字かどうかチェックします。 |
isprint | 描画可能な文字であるかどうかチェックします。これには空白も含まれます。 |
ispunct | パンクチュエーション文字かどうかチェックします。 私の Windows 7 環境では次の文字が真を返しました。[文字コード(文字) の表記] 33(!) 34(") 35(#) 36($) 37(%) 38(&) 39(') 40(() 41()) 42(*) 43(+) 44(,) 45(-) 46(.) 47(/) 58(:) 59(;) 60(<) 61(=) 62(>) 63(?) 64(@) 91([) 92(\) 93(]) 94(^) 95(_) 96(`) 123({) 124(|) 125(}) 126(~) |
isspace | 空白文字であるかチェックします。 |
isupper | 大文字かどうかチェックします。 |
isxdigit | 16進数の数字かどうかチェックします。つまり 0 から 9、A から F、a から z で真です。 |
tolower | 小文字への変換関数 |
toupper | 大文字への変換関数。 |
試しに isprint でプリント可能文字の出力のコードと実行例を示します。
#include <stdio.h>
#include <ctype.h>
void main() {
int i, j;
for (i = 0, j = 0; i < 256; i++) {
if (isprint(i)) {
printf("%3d(%c)\t", i, i);
if (++j == 5) {
printf("\n");
j = 0;
}
}
}
}
これを実行した結果は次の通り。
32( ) 33(!) 34(") 35(#) 36($)
37(%) 38(&) 39(') 40(() 41())
42(*) 43(+) 44(,) 45(-) 46(.)
47(/) 48(0) 49(1) 50(2) 51(3)
52(4) 53(5) 54(6) 55(7) 56(8)
57(9) 58(:) 59(;) 60(<) 61(=)
62(>) 63(?) 64(@) 65(A) 66(B)
67(C) 68(D) 69(E) 70(F) 71(G)
72(H) 73(I) 74(J) 75(K) 76(L)
77(M) 78(N) 79(O) 80(P) 81(Q)
82(R) 83(S) 84(T) 85(U) 86(V)
87(W) 88(X) 89(Y) 90(Z) 91([)
92(\) 93(]) 94(^) 95(_) 96(`)
97(a) 98(b) 99(c) 100(d) 101(e)
102(f) 103(g) 104(h) 105(i) 106(j)
107(k) 108(l) 109(m) 110(n) 111(o)
112(p) 113(q) 114(r) 115(s) 116(t)
117(u) 118(v) 119(w) 120(x) 121(y)
122(z) 123({) 124(|) 125(}) 126(~)