Namespaces
Variants

std:: ctype <char>

From cppreference.net
ヘッダーで定義 <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 base cpp/locale/locale/facet std-ctype char-inheritance.svg

継承図

目次

ネスト型

定義
char_type char

データメンバ

メンバー 説明
std::locale::id id [static] ファセット の識別子
const std:: size_t table_size [static] 分類テーブルのサイズ(少なくとも256)

メンバー関数

新しい ctype < char > ファセットを構築する
(public member function)
ctype < char > ファセットを破棄する
(protected member function)
文字分類テーブルを取得する
(public member function)
"C"ロケールの文字分類テーブルを取得する
(public static member function)
文字または文字シーケンスを分類テーブルを使用して分類する
(public member function)
シーケンス内で指定された分類に適合する最初の文字を、分類テーブルを使用して検索する
(public member function)
シーケンス内で指定された分類に失敗する最初の文字を、分類テーブルを使用して検索する
(public member function)
do_toupper を呼び出す
( std::ctype<CharT> のpublic member function)
do_tolower を呼び出す
( std::ctype<CharT> のpublic member function)
do_widen を呼び出す
( std::ctype<CharT> のpublic member function)
do_narrow を呼び出す
( std::ctype<CharT> のpublic member function)

プロテクテッドメンバー関数

[virtual]
文字または文字列を大文字に変換する
( std::ctype<CharT> の仮想保護メンバー関数)
[virtual]
文字または文字列を小文字に変換する
( std::ctype<CharT> の仮想保護メンバー関数)
[virtual]
文字または文字列を char から CharT に変換する
( std::ctype<CharT> の仮想保護メンバー関数)
[virtual]
文字または文字列を CharT から char に変換する
( std::ctype<CharT> の仮想保護メンバー関数)

std:: ctype_base から継承

ネスト型

定義
mask 未指定の BitmaskType 型(列挙型、整数型、またはビットセット)

メンバ定数

space
[static]
空白文字分類を識別する mask の値
(公開静的メンバ定数)
print
[static]
印字可能文字分類を識別する mask の値
(公開静的メンバ定数)
cntrl
[static]
制御文字分類を識別する mask の値
(公開静的メンバ定数)
upper
[static]
大文字分類を識別する mask の値
(公開静的メンバ定数)
lower
[static]
小文字分類を識別する mask の値
(公開静的メンバ定数)
alpha
[static]
英字分類を識別する mask の値
(公開静的メンバ定数)
digit
[static]
数字分類を識別する mask の値
(公開静的メンバ定数)
punct
[static]
句読点分類を識別する mask の値
(公開静的メンバ定数)
xdigit
[static]
16進数字分類を識別する mask の値
(公開静的メンバ定数)
blank
[static] (C++11)
空白文字分類を識別する mask の値
(公開静的メンバ定数)
alnum
[static]
alpha | digit
(公開静的メンバ定数)
graph
[static]
alnum | punct
(公開静的メンバ定数)

以下の例は、カンマ区切り値をトークン化するための ctype < char > の変更を示しています:

#include <cstddef>
#include <iostream>
#include <locale>
#include <sstream>
#include <vector>
// 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

不具合報告

以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。

DR 適用対象 公開時の動作 正しい動作
LWG 695 C++98 table() および classic_table() はprotectedメンバ関数であった それらをpublicに変更

関連項目

文字分類テーブルを定義する
(クラステンプレート)
文字分類カテゴリを定義する
(クラス)
名前付きロケールに対するシステム提供の std::ctype を表す
(クラステンプレート)