名前空間
変種
操作

std::ctype<char>

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

この std::ctype の特殊化は型 char に対する文字の分類の機能をカプセル化します。 仮想関数を使用する汎用の std::ctype と異なり、この特殊化は文字を分類するために (一般的にはより高速な) テーブルルックアップを使用します。

基底クラス std::ctype<char> は最小限の "C" ロケールと同等な文字の分類を実装します。 分類のルールは、非デフォルトな分類テーブル引数を使用して構築したり、 std::ctype_byname<char> として、またはユーザ定義の派生ファセットとして構築すれば、拡張または変更できます。 すべての std::istream の書式付き入力関数は、入力の解析中に文字を分類するために std::ctype<char> を使用することが要求されます。

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

継承図

目次

[編集] メンバ型

メンバ型 定義
char_type char

[編集] メンバ関数

新しい std::ctype<char> ファセットを構築します
(パブリックメンバ関数) [edit]
std::ctype<char> ファセットを破棄します
(プロテクテッドメンバ関数) [edit]
文字分類テーブルを取得します
(パブリックメンバ関数) [edit]
"C" ロケールの文字分類テーブルを取得します
(パブリック静的メンバ関数) [edit]
分類テーブルを用いて、文字を分類します
(パブリックメンバ関数) [edit]
分類テーブルを用いて、指定された分類に分類されるシーケンス内の最初の文字を探します
(パブリックメンバ関数) [edit]
分類テーブルを用いて、指定された分類に分類されないシーケンス内の最初の文字を探します
(パブリックメンバ関数) [edit]
do_toupper を呼びます
(std::ctypeのパブリックメンバ関数) [edit]
do_tolower を呼びます
(std::ctypeのパブリックメンバ関数) [edit]
do_widen を呼びます
(std::ctypeのパブリックメンバ関数) [edit]
do_narrow を呼びます
(std::ctypeのパブリックメンバ関数) [edit]

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

[仮想]
文字を大文字に変換します
(std::ctypeの仮想プロテクテッドメンバ関数) [edit]
[仮想]
文字を小文字に変換します
(std::ctypeの仮想プロテクテッドメンバ関数) [edit]
[仮想]
文字を char から charT に変換します
(std::ctypeの仮想プロテクテッドメンバ関数) [edit]
[仮想]
文字を charT から char に変換します
(std::ctypeの仮想プロテクテッドメンバ関数) [edit]

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

static std::locale::id id
[静的]
ロケールの id
(パブリック静的メンバ定数)
static const std::size_t table_size
[静的]
分類テーブルのサイズ、少なくとも256
(パブリック静的メンバ定数)

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
(パブリック静的メンバ定数)

[編集]

以下の例はコンマ区切りの値をトークン化するための ctype<char> の変更をデモンストレーションします。

#include <iostream>
#include <vector>
#include <locale>
#include <sstream>
 
// This ctype facet classifies commas and endlines as whitespace
struct csv_whitespace : std::ctype<char> {
    static const mask* make_table()
    {
        // make a copy of the "C" locale table
        static std::vector<mask> v(classic_table(), classic_table() + table_size);
        v[','] |=  space;  // comma will be classified as whitespace
        v[' '] &= ~space;      // space will not be classified as whitespace
        return &v[0];
    }
    csv_whitespace(std::size_t refs = 0) : ctype(make_table(), false, refs) {}
};
 
int main()
{
    std::string in = "Column 1,Column 2,Column 3\n123,456,789";
    std::string token;
 
    std::cout << "default locale:\n";
    std::istringstream s1(in);
    while(s1 >> token)
            std::cout << "  " << token << '\n';
 
    std::cout << "locale with modified ctype:\n";
    std::istringstream s2(in);
    s2.imbue(std::locale(s2.getloc(), new csv_whitespace));
    while(s2 >> token)
            std::cout << "  " << 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

[編集] 関連項目

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