C文字の分類
C文字分類は、Cプログラミング言語用のANSI C標準ライブラリの関数グループによって提供される操作です。これらの関数は、アルファベット文字、制御文字など、特定のクラスの文字のメンバーシップについて文字をテストするために使用されます。シングルバイト文字とワイド文字の両方がサポートされています。
歴史
UnixでCを書く初期のツールスミスは、文字をさまざまなタイプに分類するためのイディオムを急速に開発し始めました。たとえば、ASCII文字セットでは、次のテストは文字を識別します。
しかし、このイディオムは必ずしも EBCDICなどの他の文字セットでは動作しません 。
すぐに、上記のようなテスト、またはさらに悪いことに、上記のようなテストでプログラムが厚くなった。プログラマは、同じイディオムをいくつかの異なる方法で記述できます。これにより、理解が遅くなり、エラーが発生する可能性が高くなります。
やがて、イディオムはctype.h>の関数に置き換えられました。
実装
上記の例とは異なり、文字分類ルーチンは比較テストとして作成されていません。ほとんどのCライブラリでは、マクロや関数ではなく、静的なテーブルルックアップとして記述されています。
たとえば、ビットフィールドとして配置された256個の8ビット整数の配列が作成されます。各ビットは、文字の特定のプロパティ(isdigit、isalphaなど)に対応します。整数の最下位ビットがisdigitプロパティに対応する場合、コードは次のように記述できます。
Linuxの初期バージョンでは、最初のコードサンプルと同様の潜在的に障害のある方法を使用していました。
これは、xに副作用がある場合、たとえばisdigit(x ++)またはisdigit(run_some_program())を呼び出す場合に問題を引き起こす可能性があります。 isdigitの引数が2回評価されていることはすぐにはわかりません。このため、一般的にテーブルベースのアプローチが使用されます。
これらの2つの方法の違いは、SCO v。IBMのケースで興味深い点になりました。
機能の概要
シングルバイト文字を操作する関数は、ctype.hヘッダー(C ++のcctypeヘッダー)で定義されています。ワイド文字を操作する関数は、wctype.hヘッダー(C ++のcwctypeヘッダー)で定義されています。
分類は、現在のロケールに従って行われます。
バイト キャラクター | ワイド キャラクター | 説明 |
---|---|---|
isalnum | イスワルナム | byte / wchar_tが英数字かどうかを確認します |
isalpha | iswalpha | byte / wchar_tがアルファベットかどうかを確認します |
低い | 圧倒的 | byte / wchar_tが小文字かどうかを確認します |
isupper | iswupper | byte / wchar_tが大文字のbyte / wchar_tであるかどうかを確認します |
isdigit | iswdigit | byte / wchar_tが数字かどうかを確認します |
isxdigit | iswxdigit | byte / wchar_tが16進数byte / wchar_tかどうかを確認します |
iscntrl | iswcntrl | byte / wchar_tが制御byte / wchar_tであるかどうかを確認します |
イスグラフ | iswgraph | byte / wchar_tがグラフィカルバイト/ wchar_tかどうかを確認します |
isspace | iswspace | byte / wchar_tがスペースbyte / wchar_tであるかどうかを確認します |
空白 | iswblank | byte / wchar_tが空白のbyte / wchar_tであるかどうかを確認します(C99 / C ++ 11) |
isprint | iswprint | byte / wchar_tが印刷byte / wchar_tかどうかを確認します |
ispunct | iswpunct | byte / wchar_tが句読点byte / wchar_tであるかどうかを確認します |
低い | けん引 | byte / wchar_tを小文字に変換します |
タッパー | けん引 | byte / wchar_tを大文字に変換します |
なし | iswctype | wchar_tが特定のクラスに該当するかどうかを確認します |
なし | towctrans | 特定のマッピングを使用してwchar_tを変換します |
なし | wctype | iswctypeで使用されるワイド文字クラスを返します |
なし | wctrans | towctransで使用される変換マッピングを返します |