C/C++ 入門

ホーム > 標準 C ライブラリ > 文字分類関数

文字分類関数

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(~)
ホーム > 標準 C ライブラリ > 文字分類関数