ctype 類別
類別,提供用於字元分類、大小寫轉換,以及原生字元集和地區設定所用字元集之間轉換的 facet。
語法
template <class CharType>
class ctype : public ctype_base;
參數
CharType
用於程式內部字元編碼的類型。
備註
如同所有地區設定 facet,靜態物件識別碼有初始儲存值零。 第一次嘗試存取其預存值時,會在 id
中儲存唯一的正值。 基底類別 ctype_base 中為分類準則提供巢狀位元遮罩類型。
C++標準連結庫會定義此類別範本的兩個明確特製化:
ctype<char>
,明確特製化,其差異會分別描述。 如需詳細資訊,請參閱ctype<char>
類別。ctype<wchar_t>
,會將專案視為寬字元。
類別範本 ctype<CharType>
的其他特製化:
使用表達式
(char)ch
將 CharType 類型的值 ch 轉換為 型char
別的值。使用表達式 將 型
char
別的值位元組轉換為 CharType 類型的值。CharType(byte)
所有其他作業都會以與明確特製化 ctype<char>
相同的方式對char
值執行。
建構函式
建構函式 | 描述 |
---|---|
ctype | ctype 類別物件的建構函式,這些物件做為字元的地區設定 facet。 |
Typedefs
類型名稱 | 描述 |
---|---|
char_type | 類型,描述由地區設定使用的字元。 |
成員函式
成員函數 | 描述 |
---|---|
do_is | 虛擬函式,呼叫以測試單一字元是否有特定屬性,或分類範圍中每個字元的屬性並將其儲存在陣列中。 |
do_narrow | 虛擬函式,呼叫以將地區設定使用的 CharType 類型字元轉換為原生字元集中 char 類型的對應字元。 |
do_scan_is | 虛擬函式,呼叫以尋找範圍中符合指定之遮罩的第一個字元。 |
do_scan_not | 虛擬函式,呼叫以尋找範圍中不符合指定之遮罩的第一個字元。 |
do_tolower | 虛擬函式,呼叫以將字元或字元範圍轉換為小寫。 |
do_toupper | 虛擬函式,呼叫以將字元或字元範圍轉換為大寫。 |
do_widen | 虛擬函式,呼叫以將原生字元集中 char 類型的字元轉換為地區設定使用的 CharType 類型的對應字元。 |
is | 測試單一字元是否有特定屬性,或分類範圍中每個字元的屬性並將其儲存在陣列中。 |
narrow | 將地區設定使用的 CharType 類型的字元轉換為原生字元集中 char 類型的對應字元。 |
scan_is | 尋找範圍中符合指定之遮罩的第一個字元。 |
scan_not | 尋找範圍中不符合指定之遮罩的第一個字元。 |
tolower | 將字元或字元範圍轉換為小寫。 |
toupper | 將字元或字元範圍轉換為大寫。 |
widen | 將原生字元集中 char 類型的字元轉換為地區設定使用的 CharType 類型的對應字元。 |
需求
Header:<locale>
命名空間:std
ctype::char_type
類型,描述由地區設定使用的字元。
typedef CharType char_type;
備註
此類型與範本參數 CharType 同義。
範例
請參閱成員函式 widen 的範例,其會使用 char_type
作為傳回值。
ctype::ctype
ctype 類別物件的建構函式,可作為字元的地區設定 Facet。
explicit ctype(size_t _Refs = 0);
參數
_裁判
整數值,用來指定物件的記憶體管理類型。
備註
_Refs 參數的可能值及其重要性如下:
0:物件的存留期由包含該物件的地區設定來管理。
1:物件的存留期必須以手動方式管理。
> 1:未定義這些值。
無法提供任何直接範例,因為解構函式受到保護。
建構函式會以 locale::facet( _Refs
) 初始化其 locale::facet
基底物件。
ctype::d o_is
虛擬函式,呼叫以測試單一字元是否有特定屬性,或分類範圍中每個字元的屬性並將其儲存在陣列中。
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
陣列的開頭指標,其中遮罩值會說明每個字元所要儲存之屬性的特性。
傳回值
第一個成員函式會傳回 Boolean 值,如果 true
測試的字元具有遮罩值所描述的屬性,則為 , false
如果其沒有 屬性,則為 。
第二個成員函式會傳回陣列,其中包含的遮罩值說明範圍中每個字元之屬性的特性。
備註
ctype_base 類別 (其為 ctype 衍生來源) 會提供遮罩值,來分類字元的屬性。 第一個成員函式可以接受其第一個參數的表達式,稱為位掩碼,並由位運算符 (|
、 、 &
^
、 ~
) 組合遮罩值所組成。
範例
請參閱 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
類型字元。
預設值
成員函式指派給 CharType
類型字元的預設值,這些字元並不具備 char
類型的對應字元。
first
要轉換的字元範圍中,第一個字元的指標。
last
要轉換的字元範圍中,緊接著最後一個字元的指標。
dest
在目的範圍 (其會儲存轉換的字元範圍) 中,第一個 char
類型字元的 const 指標。
傳回值
第一個受保護的成員函式會傳回 char 類型的原生字元CharType
,如果未定義對應項,則為類型或預設值。
第二個受保護的成員函式會傳回原生字元 (從 CharType
類型字元轉換而來) 目的範圍的指標。
備註
第二個受保護的成員範本函式會儲存在 dest
[ I
] 值 do_narrow
( first
[ I
], ), I
以間隔 [0,last
- default
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。
備註
受保護的成員函式會傳回 [ first
, last
) 範圍中的最小指標 ptr
,其 do_is( maskVal
, * ptr
) 為 true。
範例
請參閱 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。
備註
受保護的成員函式會傳回 [ first
, last
) 範圍中的最小指標 ptr
,其 do_is( maskVal
, * ptr
) 為 false。
範例
請參閱 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。 第二個受保護的成員函式會傳回最後一個。
備註
第二個受保護的成員範本函式會將間隔 [0, last
- I
first
] 中的每個元素 first
[ I
] 取代為 do_tolower
[ first
] 。 I
範例
請參閱 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。 第二個受保護的成員函式會傳回最後一個。
備註
第二個受保護的成員範本函式會將間隔 [0, last
- I
first
] 中的每個元素 first
[ I
] 取代為 do_toupper
[ first
] 。 I
範例
請參閱 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
類型字元。
第二個受保護的成員函式會傳回 CharType
類型字元 (用於從 char
類型原生字元轉換的地區設定) 的目的範圍的指標。
備註
第二個受保護的成員範本函式會在 dest
[ I
] 中儲存 I
的值 do_widen
( first
[ I
]),間隔為 [0, last
- first
)。
範例
請參閱 widen 的範例,其會呼叫 do_widen
。
ctype::is
測試單一字元是否有特定屬性,或分類範圍中每個字元的屬性並將其儲存在陣列中。
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
。
第二個成員函式會傳回要分類其屬性的範圍中,最後一個字元的指標。
備註
ctype_base 類別 (其為 ctype 衍生來源) 會提供遮罩值,來分類字元的屬性。 第一個成員函式可以接受其第一個參數的表達式,稱為位掩碼,並由位運算符 (|
、 、 &
^
、 ~
) 組合遮罩值所組成。
範例
// 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
類型字元。
預設值
成員函式指派給 CharType
類型字元的預設值,這些字元並不具備 char
類型的對應字元。
first
要轉換的字元範圍中,第一個字元的指標。
last
要轉換的字元範圍中,緊接著最後一個字元的指標。
dest
在目的範圍 (其會儲存轉換的字元範圍) 中,第一個 char
類型字元的 const 指標。
傳回值
第一個成員函式會傳回對應於 CharType default
類型參數字元的 char
類型原生字元 (如果沒有定義對應項目的話)。
第二個成員函式會傳回原生字元 (從 CharType
類型字元轉換而來) 目的範圍的指標。
備註
第一個成員函式會傳回 do_narrow(ch
, default
)。 第二個成員函式會傳回do_narrow (first
、 、 default
last
、 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。
第二個成員函式會傳回 last。
備註
第一個成員函式會 傳回 do_tolower(ch
)。 第二個成員函式會傳回 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。
第二個成員函式會傳回 last。
備註
第一個成員函式會傳回 do_toupper(ch
)。 第二個成員函式會傳回 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
類型字元。
第二個成員函式會傳回 CharType
類型字元 (用於從 char
類型原生字元轉換的地區設定) 的目的範圍的指標。
備註
第一個成員函式會傳回 do_widen(byte
)。 第二個成員函式會傳回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!