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!