Share via


ctype クラス

文字の分類、大文字と小文字の変換、およびネイティブ文字セットとロケールで使用される文字セットとの変換に使用されるふぁセットを提供するクラス。

構文

template <class CharType>
class ctype : public ctype_base;

パラメーター

CharType
文字をエンコードするためにプログラム内で使用される型。

解説

すべてのロケールのファセットと同様、静的オブジェクト ID に最初に格納されている値は 0 です。 格納されている値に初めてアクセスしようとすると、id に一意の正の値が格納されます。 分類の条件は、基底クラス ctype_base の入れ子になったビットマスク型で提供されます。

C++ 標準ライブラリは、このクラス テンプレートの 2 つの明示的な特殊化を定義します。

  • ctype<char>。違いが別個に記述される明示的な特殊化です。 詳細については、「ctype<char> クラス」を参照してください。

  • ctype<wchar_t>。要素をワイド文字として扱います。

クラス テンプレート ctype<CharType> のその他の特殊化:

  • (char)ch を使用して、CharType 型の値 ch を、char 型の値に変換します。

  • CharType(byte) を使用して、char 型の値 byte を、CharType 型の値に変換します。

他の操作はすべて明示的な特殊化 ctype<char> の場合と同様に char 値に対して実行されます。

コンストラクター

コンストラクター 説明
ctype 文字のロケール ファセットとして機能する ctype クラスのオブジェクトのコンストラクター。

Typedefs

型名 説明
char_type ロケールによって使用される文字を表す型。

メンバー関数

メンバー関数 説明
do_is 1 つの文字が特定の属性を持つかどうかをテストしたり、範囲内の各文字の属性を分類して配列に格納したりするために呼び出される仮想関数。
do_narrow ロケールで使用される CharType 型の文字を、ネイティブ文字セットの char 型の対応する文字に変換するために呼び出される仮想関数。
do_scan_is 指定されたマスクに一致する範囲内の最初の文字を検索するために呼び出される仮想関数。
do_scan_not 指定されたマスクに一致しない範囲内の最初の文字を検索するために呼び出される仮想関数。
do_tolower 文字または文字の範囲を小文字に変換するために呼び出される仮想関数。
do_toupper 文字または文字の範囲を大文字に変換するために呼び出される仮想関数。
do_widen ネイティブ文字セットの char 型の文字を、ロケールで使用される CharType 型の対応する文字に変換するために呼び出される仮想関数。
is 1 つの文字が特定の属性を持つかどうかをテストするか、範囲内の各文字の属性を分類して配列に格納します。
narrow ロケールで使用される CharType 型の文字を、ネイティブ文字セットの char 型の対応する文字に変換します。
scan_is 指定されたマスクに一致する範囲内の最初の文字を検索します。
scan_not 指定されたマスクに一致しない範囲内の最初の文字を検索します。
tolower 文字または文字の範囲を小文字に変換します。
toupper 文字または文字の範囲を大文字に変換します。
widen ネイティブ文字セットの char 型の文字を、ロケールで使用される CharType 型の対応する文字に変換します。

必要条件

ヘッダー:<locale>

名前空間: std

ctype::char_type

ロケールによって使用される文字を表す型。

typedef CharType char_type;

解説

この型は、テンプレート パラメーター CharType のシノニムです。

戻り値として char_type を使用する例については、メンバー関数 widen をご覧ください。

ctype::ctype

文字のロケール ファセットとして機能する ctype クラスのオブジェクトのコンストラクター。

explicit ctype(size_t _Refs = 0);

パラメーター

_Refs
オブジェクトのメモリ管理の種類を指定するために使用する整数値。

解説

_Refs パラメーターの可能な値とその重要性は次のとおりです。

  • 0: オブジェクトの有効期間はそれが含まれるロケールによって管理されます。

  • 1: オブジェクトの有効期間を手動で管理する必要があります。

  • > 1: これらの値は定義されていません。

デストラクターが保護されているため、利用できる直接的な例はありません。

コンストラクターは、locale::facet( _Refs) を使用して、その locale::facet 基本オブジェクトを初期化します。

ctype::d o_is

1 つの文字が特定の属性を持つかどうかをテストしたり、範囲内の各文字の属性を分類して配列に格納したりするために呼び出される仮想関数。

virtual bool do_is(
    mask maskVal,
    CharType ch) const;

virtual const CharType *do_is(
    const CharType* first,
    const CharType* last,
    mask* dest) const;

パラメーター

maskVal
文字をテストするマスク値。

ch
属性をテストする文字。

first
属性を分類する範囲の最初の文字を示すポインター。

last
属性を分類する範囲の最初の文字の直後に続く文字を示すポインター。

dest
各文字の属性の特徴になるマスク値を格納する配列の先頭を示すポインター。

戻り値

最初のメンバー関数は、テストされた文字にマスク値により表される属性が含まれる場合、ブール値 true を返します。そのような属性が含まれない場合、false を返します。

2 番目のメンバー関数は、範囲内の各文字の属性を特徴付けるマスク値を含む配列を返します。

解説

文字の属性を分類するマスク値は、ctype の派生元である、クラス ctype_base により提供されます。 最初のメンバー関数は、ビットマスクと呼ばれる最初のパラメーターの式を受け入れることができ、ビットごとの演算子 (|, , &^, ~) によるマスク値の組み合わせから形成されます。

is の例 (do_is を呼び出す) を参照してください。

ctype::d o_narrow

ロケールで使用される CharType 型の文字を、ネイティブ文字セットの char 型の対応する文字に変換するために呼び出される仮想関数。

virtual char do_narrow(
    CharType ch,
    char default = '\0') const;

virtual const CharType* do_narrow(
    const CharType* first,
    const CharType* last,
    char default,
    char* dest) const;

パラメーター

ch
変換されるロケールにより使用される型 Chartype の文字。

default
CharType の文字に対となる型 char の文字がない場合にメンバー関数が割り当てる既定値。

first
変換の対象となる一定範囲の文字のうち、最初の文字を示すポインター。

last
変換の対象となる一定範囲の文字のうち、最初の文字の直後に続く文字を示すポインター。

dest
変換後の文字範囲を格納する宛先範囲のうち、型 char の最初の文字を示す const ポインター。

戻り値

保護されている最初のメンバー関数は、対になる片方が定義されていない場合、型 CharType または default のパラメーター文字に対応する型 char のネイティブ文字を返します。

保護されている 2 番目のメンバー関数は、型 CharType の文字から変換されたネイティブ文字の宛先範囲を示すポインターを返します。

解説

保護されている 2 番目のメンバー テンプレート関数は、値 do_narrow( first [ I], default) を dest[ I] に格納します。I の間隔は [0, last - first) です。

narrow の例 (do_narrow を呼び出す) を参照してください。

ctype::d o_scan_is

指定されたマスクに一致する範囲内の最初の文字を検索するために呼び出される仮想関数。

virtual const CharType *do_scan_is(
    mask maskVal,
    const CharType* first,
    const CharType* last) const;

パラメーター

maskVal
文字により照合されるマスク値。

first
スキャンの対象となる一定範囲の文字のうち、最初の文字を示すポインター。

last
スキャンの対象となる一定範囲の文字のうち、最初の文字の直後に続く文字を示すポインター。

戻り値

指定されたマスクに一致する範囲内の最初の文字を示すポインター。 そのような値が存在しない場合、この関数は last を返します。

解説

保護されているメンバー関数は、do_is( maskVal, * ptr) が true となっている範囲 [ first, last) 内の最小ポインター ptr を返します。

scan_is の例 (do_scan_is を呼び出す) を参照してください。

ctype::d o_scan_not

指定されたマスクに一致しない範囲内の最初の文字を検索するために呼び出される仮想関数。

virtual const CharType *do_scan_not(
    mask maskVal,
    const CharType* first,
    const CharType* last) const;

パラメーター

maskVal
文字により照合されないマスク値。

first
スキャンの対象となる一定範囲の文字のうち、最初の文字を示すポインター。

last
スキャンの対象となる一定範囲の文字のうち、最初の文字の直後に続く文字を示すポインター。

戻り値

指定されたマスクに一致しない範囲内の最初の文字を示すポインター。 そのような値が存在しない場合、この関数は last を返します。

解説

保護されているメンバー関数は、do_is( maskVal, * ptr) が false となっている範囲 [ first, last) 内の最小ポインター ptr を返します。

scan_not の例 (do_scan_not を呼び出す) を参照してください。

ctype::d o_tolower

文字または文字の範囲を小文字に変換するために呼び出される仮想関数。

virtual CharType do_tolower(CharType ch) const;

virtual const CharType *do_tolower(
    CharType* first,
    const CharType* last) const;

パラメーター

ch
小文字に変換される文字。

first
大文字/小文字を変換する一定範囲の文字のうち、最初の文字を示すポインター。

last
大文字/小文字を変換する一定範囲の文字のうち、最初の文字の直後に続く文字を示すポインター。

戻り値

保護されている最初のメンバー関数は、パラメーター ch を小文字で返します。 小文字の形態が存在しない場合、ch を返します。 保護されている 2 番目のメンバー関数は last を返します。

解説

保護されている 2 番目のメンバー テンプレート関数は、各要素 first [ I] を do_tolower( first [ I]) で置換します。I の間隔は [0, last - first) です。

tolower の例 (do_tolower を呼び出す) を参照してください。

ctype::d o_toupper

文字または文字の範囲を大文字に変換するために呼び出される仮想関数。

virtual CharType do_toupper(CharType ch) const;

virtual const CharType *do_toupper(
    CharType* first,
    const CharType* last) const;

パラメーター

ch
大文字に変換される文字。

first
大文字/小文字を変換する一定範囲の文字のうち、最初の文字を示すポインター。

last
大文字/小文字を変換する一定範囲の文字のうち、最初の文字の直後に続く文字を示すポインター。

戻り値

保護されている最初のメンバー関数は、パラメーター ch を大文字で返します。 大文字の形態が存在しない場合、ch を返します。 保護されている 2 番目のメンバー関数は last を返します。

解説

保護されている 2 番目のメンバー テンプレート関数は、各要素 first [ I] を do_toupper( first [ I]) で置換します。I の間隔は [0, last - first) です。

toupper の例 (do_toupper を呼び出す) を参照してください。

ctype::d o_widen

ネイティブ文字セットの char 型の文字を、ロケールで使用される CharType 型の対応する文字に変換するために呼び出される仮想関数。

virtual CharType do_widen(char byte) const;

virtual const char *do_widen(
    const char* first,
    const char* last,
    CharType* dest) const;

パラメーター

byte
変換するネイティブ文字セットのうち、型 char の文字。

first
変換の対象となる一定範囲の文字のうち、最初の文字を示すポインター。

last
変換の対象となる一定範囲の文字のうち、最初の文字の直後に続く文字を示すポインター。

dest
変換後の文字範囲を格納する宛先範囲のうち、型 CharType の最初の文字を示すポインター。

戻り値

保護されている最初のメンバー関数は、ネイティブ型 char のパラメーター文字に対応する型 CharType の文字を返します。

保護されている 2 番目のメンバー関数は、型 char のネイティブ文字から変換されたロケールで使用される型 CharType の文字の宛先範囲を示すポインターを返します。

解説

保護されている 2 番目のメンバー テンプレート関数は、値 do_widen( first[ I]) を dest[ I] に格納します。I の間隔は [0, last - first) です。

widen の例 (do_widen を呼び出す) を参照してください。

ctype::is

1 つの文字が特定の属性を持つかどうかをテストするか、範囲内の各文字の属性を分類して配列に格納します。

bool is(mask maskVal, CharType ch) const;

const CharType *is(
    const CharType* first,
    const CharType* last,
    mask* dest) const;

パラメーター

maskVal
文字をテストするマスク値。

ch
属性をテストする文字。

first
属性を分類する範囲の最初の文字を示すポインター。

last
属性を分類する範囲の最初の文字の直後に続く文字を示すポインター。

dest
各文字の属性の特徴になるマスク値を格納する配列の先頭を示すポインター。

戻り値

最初のメンバー関数は、テストされた文字にマスク値により表される属性が含まれる場合、true を返します。そのような属性が含まれない場合、false を返します。

2 番目のメンバー関数は、属性を分類する範囲の最後の文字を示すポインターを返します。

解説

文字の属性を分類するマスク値は、ctype の派生元である、クラス ctype_base クラスにより提供されます。 最初のメンバー関数は、ビットマスクと呼ばれる最初のパラメーターの式を受け入れることができ、ビットごとの演算子 (|, , &^, ~) によるマスク値の組み合わせから形成されます。

// ctype_is.cpp
// compile with: /EHsc
#include <locale>
#include <iostream>
using namespace std;

int main() {
   locale loc1 ( "German_Germany" ), loc2 ( "English_Australia" );

   if (use_facet<ctype<char> > ( loc1 ).is( ctype_base::alpha, 'a' ))
      cout << "The character 'a' in locale loc1 is alphabetic."
           << endl;
   else
      cout << "The character 'a' in locale loc1 is not alphabetic."
           << endl;

   if (use_facet<ctype<char> > ( loc2 ).is( ctype_base::alpha, '!' ))
      cout << "The character '!' in locale loc2 is alphabetic."
           << endl;
   else
      cout << "The character '!' in locale loc2 is not alphabetic."
           << endl;

   char *string = "Hello, my name is John!";
   ctype<char>::mask maskarray[30];
   use_facet<ctype<char> > ( loc2 ).is(
      string, string + strlen(string), maskarray );
   for (unsigned int i = 0; i < strlen(string); i++) {
      cout << string[i] << ": "
           << (maskarray[i] & ctype_base::alpha  "alpha"
                                                : "not alpha")
           << endl;;
   };
}

ctype::narrow

ロケールにより使用される型 CharType の文字を、ネイティブ文字セットの型 char の該当文字に変換します。

char narrow(CharType ch, char default = '\0') const;

const CharType* narrow(
    const CharType* first,
    const CharType* last,
    char default,
    char* dest) const;

パラメーター

ch
変換されるロケールにより使用される型 Chartype の文字。

default
CharType の文字に対となる型 char の文字がない場合にメンバー関数が割り当てる既定値。

first
変換の対象となる一定範囲の文字のうち、最初の文字を示すポインター。

last
変換の対象となる一定範囲の文字のうち、最初の文字の直後に続く文字を示すポインター。

dest
変換後の文字範囲を格納する宛先範囲のうち、型 char の最初の文字を示す const ポインター。

戻り値

最初のメンバー関数は、対になる片方が定義されていない場合、型 CharType default のパラメーター文字に対応する型 char のネイティブ文字を返します。

2 番目のメンバー関数は、型 CharType の文字から変換されたネイティブ文字の宛先範囲を示すポインターを返します。

解説

最初のメンバー関数は、do_narrow(ch, default) を返します。 2 番目のメンバー関数は、do_narrow (first, last, default, dest) を返します。 基本ソース文字にのみ、narrow の下で一意の逆像 CharType が与えられることが約束されます。 これの基本ソース文字については、narrow ( widen ( c ), 0 ) == c という不変式が適用されます。

// ctype_narrow.cpp
// compile with: /EHsc /W3
#include <locale>
#include <iostream>
using namespace std;

int main( )
{
   locale loc1 ( "english" );
   wchar_t *str1 = L"\x0392fhello everyone";
   char str2 [16];
   bool result1 = (use_facet<ctype<wchar_t> > ( loc1 ).narrow
      ( str1, str1 + wcslen(str1), 'X', &str2[0] ) != 0);  // C4996
   str2[wcslen(str1)] = '\0';
   wcout << str1 << endl;
   cout << &str2[0] << endl;
}
Xhello everyone

ctype::scan_is

指定されたマスクに一致する範囲内の最初の文字を検索します。

const CharType *scan_is(
    mask maskVal,
    const CharType* first,
    const CharType* last) const;

パラメーター

maskVal
文字により照合されるマスク値。

first
スキャンの対象となる一定範囲の文字のうち、最初の文字を示すポインター。

last
スキャンの対象となる一定範囲の文字のうち、最初の文字の直後に続く文字を示すポインター。

戻り値

指定されたマスクに一致する範囲内の最初の文字を示すポインター。 そのような値が存在しない場合、この関数は last を返します。

解説

メンバー関数は、do_scan_is(maskVal, first, last) を返します。

// ctype_scan_is.cpp
// compile with: /EHsc
#include <locale>
#include <iostream>
using namespace std;

int main( )
{
   locale loc1 ( "German_Germany" );

   char *string = "Hello, my name is John!";

   const char* i = use_facet<ctype<char> > ( loc1 ).scan_is
      ( ctype_base::punct, string, string + strlen(string) );
   cout << "The first punctuation is \"" << *i << "\" at position: "
      << i - string << endl;
}
The first punctuation is "," at position: 5

ctype::scan_not

指定されたマスクに一致しない範囲内の最初の文字を検索します。

const CharType *scan_not(
    mask maskVal,
    const CharType* first,
    const CharType* last) const;

パラメーター

maskVal
文字により照合されないマスク値。

first
スキャンの対象となる一定範囲の文字のうち、最初の文字を示すポインター。

last
スキャンの対象となる一定範囲の文字のうち、最初の文字の直後に続く文字を示すポインター。

戻り値

指定されたマスクに一致しない範囲内の最初の文字を示すポインター。 そのような値が存在しない場合、この関数は last を返します。

解説

メンバー関数は、do_scan_not(maskVal, first, last) を返します。

// ctype_scan_not.cpp
// compile with: /EHsc
#include <locale>
#include <iostream>
using namespace std;

int main( )
{
   locale loc1 ( "German_Germany" );

   char *string = "Hello, my name is John!";

   const char* i = use_facet<ctype<char> > ( loc1 ).scan_not
      ( ctype_base::alpha, string, string + strlen(string) );
   cout << "First nonalpha character is \"" << *i << "\" at position: "
      << i - string << endl;
}
First nonalpha character is "," at position: 5

ctype::tolower

文字または文字の範囲を小文字に変換します。

CharType tolower(CharType ch) const;

const CharType *tolower(CharType* first, const CharType* last) const;

パラメーター

ch
小文字に変換される文字。

first
大文字/小文字を変換する一定範囲の文字のうち、最初の文字を示すポインター。

last
大文字/小文字を変換する一定範囲の文字のうち、最初の文字の直後に続く文字を示すポインター。

戻り値

最初のメンバー関数は、パラメーター ch を小文字で返します。 小文字の形態が存在しない場合、ch を返します。

2 番目のメンバー関数は last を返します。

解説

最初のメンバー関数は、do_tolower(ch) を返します。 2 番目のメンバー関数は、do_tolower(first, last) を返します。

// ctype_tolower.cpp
// compile with: /EHsc
#include <locale>
#include <iostream>
using namespace std;

int main( )
{
   locale loc1 ( "German_Germany" );

   char string[] = "HELLO, MY NAME IS JOHN";

   use_facet<ctype<char> > ( loc1 ).tolower
      ( string, string + strlen(string) );
   cout << "The lowercase string is: " << string << endl;
}
The lowercase string is: hello, my name is john

ctype::toupper

文字または文字の範囲を大文字に変換します。

CharType toupper(CharType ch) const;
const CharType *toupper(CharType* first, const CharType* last) const;

パラメーター

ch
大文字に変換される文字。

first
大文字/小文字を変換する一定範囲の文字のうち、最初の文字を示すポインター。

last
大文字/小文字を変換する一定範囲の文字のうち、最初の文字の直後に続く文字を示すポインター。

戻り値

最初のメンバー関数は、パラメーター ch を大文字で返します。 大文字の形態が存在しない場合、ch を返します。

2 番目のメンバー関数は last を返します。

解説

最初のメンバー関数は、do_toupper(ch) を返します。 2 番目のメンバー関数は、do_toupper( first, last) を返します。

// ctype_toupper.cpp
// compile with: /EHsc
#include <locale>
#include <iostream>
using namespace std;

int main( )
{
   locale loc1 ( "German_Germany" );

   char string[] = "Hello, my name is John";

   use_facet<ctype<char> > ( loc1 ).toupper
      ( string, string + strlen(string) );
   cout << "The uppercase string is: " << string << endl;
}
The uppercase string is: HELLO, MY NAME IS JOHN

ctype::widen

ネイティブ文字セットの char 型の文字を、ロケールで使用される CharType 型の対応する文字に変換します。

CharType widen(char byte) const;
const char *widen(const char* first, const char* last, CharType* dest) const;

パラメーター

byte
変換するネイティブ文字セットのうち、型 char の文字。

first
変換の対象となる一定範囲の文字のうち、最初の文字を示すポインター。

last
変換の対象となる一定範囲の文字のうち、最初の文字の直後に続く文字を示すポインター。

dest
変換後の文字範囲を格納する宛先範囲のうち、型 CharType の最初の文字を示すポインター。

戻り値

最初のメンバー関数は、ネイティブ型 char のパラメーター文字に対応する型 CharType の文字を返します。

2 番目のメンバー関数は、型 char のネイティブ文字から変換されたロケールで使用される型 CharType の文字の宛先範囲を示すポインターを返します。

解説

最初のメンバー関数は、do_widen(byte) を返します。 2 番目のメンバー関数は、do_widen(first, last, dest) を返します。

// ctype_widen.cpp
// compile with: /EHsc /W3
#include <locale>
#include <iostream>
using namespace std;

int main( )
{
   locale loc1 ( "English" );
   char *str1 = "Hello everyone!";
   wchar_t str2 [16];
   bool result1 = (use_facet<ctype<wchar_t> > ( loc1 ).widen
      ( str1, str1 + strlen(str1), &str2[0] ) != 0);  // C4996
   str2[strlen(str1)] = '\0';
   cout << str1 << endl;
   wcout << &str2[0] << endl;

   ctype<wchar_t>::char_type charT;
   charT = use_facet<ctype<char> > ( loc1 ).widen( 'a' );
}
Hello everyone!
Hello everyone!

関連項目

<ロケール>
C++ 標準ライブラリ内のスレッド セーフ