文字分類関数

ctype.h ヘッダーファイルでは文字の分類等を行う関数 (Character Classification Functions) が定義されています。

ASCII 文字を前提としたプログラミングでは、例えば c という変数が a から z の間に含まれているかどうか知るためには、 c が 'a' 以上かつ 'z' 以下というようなことを判定すれば十分です。

なぜなら ASCII ではそれらの文字コードが連続していることが前提としてあるからです。

しかし、そうしたコードが書いてあると、例えば EBCDIC などを使う環境では文字コードが連続していないので、期待したように動作しないことになってしまいます。

EBCDIC の文字コード表 (a-z の部分抜粋)

このため、環境毎の文字種別判定関数などが必要となるわけです。

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大文字かどうかチェックします。
isxdigit16進数の数字かどうかチェックします。つまり 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(~)