名前空間
変種
操作

std::ctype

提供: cppreference.com
< cpp‎ | locale
 
 
 
 
ヘッダ <locale> で定義
template< class CharT >
class ctype;

クラス ctype は文字の分類の機能をカプセル化します。 std::basic_istream<charT> を通して行われるすべてのストリーム入力操作は、入力のトークン化のためにホワイトスペース文字を識別するためにストリームに設定されているロケールの std::ctype<charT> を使用します。 ストリーム出力操作は出力の前にナロー文字引数に std::ctype<charT>::widen() を適用します。

cpp/locale/ctype basecpp/locale/locale/facetstd-ctype-inheritance.svg
画像の詳細

継承図

2つのスタンドアロンな (ロケール非依存な) 特殊化が標準ライブラリによって提供されます。

ヘッダ <locale> で定義
std::ctype<char> 最小限の "C" ロケールの分類に相当するナロー文字の分類を提供します。 この特殊化は文字分類のためにテーブルルックアップを使用します。
std::ctype<wchar_t> ネイティブ文字集合に適したワイド文字の分類を提供します

さらに、 C++ のプログラムによって構築されたすべてのロケールオブジェクトは、これらの特殊化の独自の (ロケール固有の) バージョンを実装します。

目次

[編集] メンバ型

メンバ型 定義
char_type CharT

[編集] メンバ関数

新しい ctype ファセットを構築します
(パブリックメンバ関数)
ctype ファセットを破棄します
(プロテクテッドメンバ関数)
do_is を呼びます
(パブリックメンバ関数) [edit]
do_scan_is を呼びます
(パブリックメンバ関数) [edit]
do_scan_not を呼びます
(パブリックメンバ関数) [edit]
do_toupper を呼びます
(パブリックメンバ関数) [edit]
do_tolower を呼びます
(パブリックメンバ関数) [edit]
do_widen を呼びます
(パブリックメンバ関数) [edit]
do_narrow を呼びます
(パブリックメンバ関数) [edit]

[編集] メンバオブジェクト

static std::locale::id id
ロケールの id
(パブリックメンバオブジェクト)

[編集] プロテクテッドメンバ関数

[仮想]
文字を分類します
(仮想プロテクテッドメンバ関数) [edit]
[仮想]
指定された分類に分類される文字シーケンス内の最初の文字を探します
(仮想プロテクテッドメンバ関数) [edit]
[仮想]
指定された分類に分類されないシーケンス内の最初の文字を探します
(仮想プロテクテッドメンバ関数) [edit]
[仮想]
文字を大文字に変換します
(仮想プロテクテッドメンバ関数) [edit]
[仮想]
文字を小文字に変換します
(仮想プロテクテッドメンバ関数) [edit]
[仮想]
文字を char から charT に変換します
(仮想プロテクテッドメンバ関数) [edit]
[仮想]
文字を charT から char に変換します
(仮想プロテクテッドメンバ関数) [edit]

std::ctype_base から継承

メンバ型

定義
mask 未規定なビットマスク型 (列挙、整数型、またはビット集合)

メンバ定数

space
[静的]
ホワイトスペース文字の分類を表す mask の値
(パブリック静的メンバ定数)
print
[静的]
印刷可能な文字の分類を表す mask の値
(パブリック静的メンバ定数)
cntrl
[静的]
制御文字の分類を表す mask の値
(パブリック静的メンバ定数)
upper
[静的]
大文字の分類を表す mask の値
(パブリック静的メンバ定数)
lower
[静的]
小文字の分類を表す mask の値
(パブリック静的メンバ定数)
alpha
[静的]
アルファベット文字の分類を表す mask の値
(パブリック静的メンバ定数)
digit
[静的]
数字の分類を表す mask の値
(パブリック静的メンバ定数)
punct
[静的]
句読点文字の分類を表す mask の値
(パブリック静的メンバ定数)
xdigit
[静的]
16進数字の分類を表す mask の値
(パブリック静的メンバ定数)
blank
[静的] (C++11)
ブランク文字の分類を表す mask の値
(パブリック静的メンバ定数)
alnum
[静的]
alpha | digit
(パブリック静的メンバ定数)
graph
[静的]
alnum | punct
(パブリック静的メンバ定数)

[編集]

以下の例は CSV ファイルをトークン化するために ctype<char> 以外の ctype の変更をデモンストレーションします。

#include <iostream>
#include <locale>
#include <sstream>
 
struct csv_whitespace : std::ctype<wchar_t>
{
    bool do_is(mask m, char_type c) const
    {   
        if ((m & space) && c == L' ') {
            return false; // space will NOT be classified as whitespace
        }
        if ((m & space) && c == L',') {
            return true; // comma will be classified as whitespace
        }
        return ctype::do_is(m, c); // leave the rest to the parent class
    } 
};
 
int main()
{
    std::wstring in = L"Column 1,Column 2,Column 3\n123,456,789";
    std::wstring token;
 
    std::wcout << "default locale:\n";
    std::wistringstream s1(in);
    while (s1 >> token) {
        std::wcout << "  " << token << '\n';
    }
 
    std::wcout << "locale with modified ctype:\n";
    std::wistringstream s2(in);
    csv_whitespace* my_ws = new csv_whitespace;
    s2.imbue(std::locale(s2.getloc(), my_ws));
    while (s2 >> token) {
        std::wcout << "  " << token<< '\n';
    }
}

出力:

default locale:
  Column
  1,Column
  2,Column
  3
  123,456,789
locale with modified ctype:
  Column 1
  Column 2
  Column 3
  123
  456
  789

[編集] 関連項目

std::ctypechar 型に対する特殊化
(クラステンプレートの特殊化)
文字分類カテゴリを定義します
(クラステンプレート)
名前付きロケールに対する ctype ファセットを作成します
(クラステンプレート)