Namespaces
Variants

std:: ctype

From cppreference.net
ヘッダーで定義 <locale>
template < class CharT >
class ctype ;

Class ctype は文字分類機能をカプセル化します。 std:: basic_istream < CharT > を通じて行われるすべてのストリーム入力操作は、入力トークン化のための空白文字を識別するために、ストリームに組み込まれたロケールの std::ctype<CharT> を使用します。ストリーム出力操作は、出力前に狭い文字引数に std::ctype<CharT>::widen() を適用します。

cpp/locale/ctype base cpp/locale/locale/facet std-ctype-inheritance.svg

継承図

目次

翻訳の説明: - 「Contents」→「目次」に翻訳 - C++専門用語(Specializations、Nested types、Data members、Member functions、Protected member functions、Inherited from、std::ctype_base、Nested types、Member constants、Example、See also)は原文のまま保持 - HTMLタグ、属性、構造は完全に保持 - 番号付けと書式は変更なし

特殊化

標準ライブラリは以下の特殊化を提供することが保証されています(これらは あらゆるロケールオブジェクトで実装が必須 とされています):

定義済みヘッダー <locale>
std::ctype<char> 最小限の「C」ロケール分類に相当するナロー文字機能を提供する。この特殊化は文字分類にテーブル参照を使用する
std :: ctype < wchar_t > ネイティブ文字セットに適したワイド文字分類を提供する

ネスト型

定義
char_type CharT

データメンバ

メンバー 説明
std::locale::id id [static] facet の識別子

メンバー関数

新しい ctype ファセットを構築する
(public member function)
ctype ファセットを破棄する
(protected member function)
do_is を呼び出す
(public member function)
do_scan_is を呼び出す
(public member function)
do_scan_not を呼び出す
(public member function)
do_toupper を呼び出す
(public member function)
do_tolower を呼び出す
(public member function)
do_widen を呼び出す
(public member function)
do_narrow を呼び出す
(public member function)

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

[virtual]
文字または文字シーケンスを分類する
(仮想 protected メンバー関数)
[virtual]
指定された分類に適合するシーケンス内の最初の文字を検索する
(仮想 protected メンバー関数)
[virtual]
指定された分類に失敗するシーケンス内の最初の文字を検索する
(仮想 protected メンバー関数)
[virtual]
1文字または複数文字を大文字に変換する
(仮想 protected メンバー関数)
[virtual]
1文字または複数文字を小文字に変換する
(仮想 protected メンバー関数)
[virtual]
1文字または複数文字を char から CharT に変換する
(仮想 protected メンバー関数)
[virtual]
1文字または複数文字を CharT から char に変換する
(仮想 protected メンバー関数)

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> 以外の ctype を変更してCSVファイルをトークン化する方法を示しています:

#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 base 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

関連項目

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