ctype – třída
Třída poskytující omezující vlastnost, která se používá ke klasifikaci znaků, převodu z velkých a malých písmen a převodu mezi nativní znakovou sadou a sadou používanou národním prostředím.
Syntaxe
template <class CharType>
class ctype : public ctype_base;
Parametry
CharType
Typ používaný v rámci programu ke kódování znaků.
Poznámky
Stejně jako u omezující vlastnosti národního prostředí má ID statického objektu počáteční uloženou hodnotu nula. První pokus o přístup k uložené hodnotě ukládá jedinečnou kladnou hodnotu v id
. Klasifikační kritéria mají k dispozici vnořený typ bitové masky v základní třídě ctype_base.
Standardní knihovna C++ definuje dvě explicitní specializace této šablony třídy:
ctype<char>
, explicitní specializace, jejíž rozdíly jsou popsány samostatně. Další informace naleznete v tématuctype<char>
Třída.ctype<wchar_t>
, který zpracovává prvky jako široké znaky.
Další specializace šablony ctype<CharType>
třídy:
Převede hodnotu typu CharType na hodnotu typu
char
pomocí výrazu(char)ch
.Převede bajt hodnoty typu
char
na hodnotu typu CharType s výrazemCharType(byte)
.
Všechny ostatní operace se provádějí na char
hodnotách stejným způsobem jako u explicitní specializace ctype<char>
.
Konstruktory
Konstruktor | Popis |
---|---|
ctype | Konstruktor pro objekty třídy ctype , které slouží jako omezující vlastnosti národního prostředí pro znaky. |
Typedefs
Název typu | Popis |
---|---|
char_type | Typ, který popisuje znak používaný národním prostředním. |
Členské funkce
Členová funkce | Popis |
---|---|
do_is | Virtuální funkce volaná k ověření, zda má jeden znak konkrétní atribut, nebo ke klasifikaci atributů v jednotlivých kontejnerech v rozsahu a jejich uložení v poli. |
do_narrow | Virtuální funkce volána k převodu znaku typu CharType používaného národním prostředím na odpovídající znak typu char v nativní znakové sadě. |
do_scan_is | Virtuální funkce volaná k vyhledání prvního znaku v rozsahu, který odpovídá zadané masce. |
do_scan_not | Virtuální funkce volaná k vyhledání prvního znaku v rozsahu, který neodpovídá zadané masce. |
do_tolower | Virtuální funkce volaná k převedení znaku nebo rozsahu znaků na malá písmena. |
do_toupper | Virtuální funkce volaná k převedení znaku nebo rozsahu znaků na velká písmena. |
do_widen | Virtuální funkce volána k převodu znaku typu char v nativní znakové sadě na odpovídající znak typu CharType používaný národním prostředím. |
is | Ověřuje, zda má jeden znak konkrétní atribut, nebo klasifikuje atributy v jednotlivých kontejnerech v rozsahu a uloží je v poli. |
úzký | Převede znak typu CharType používaný národním prostředím na odpovídající znak znak typu v nativní znakové sadě. |
scan_is | Vyhledá první znak v rozsahu, který odpovídá zadané masce. |
scan_not | Vyhledá první znak v rozsahu, který neodpovídá zadané masce. |
tolower | Převede znak nebo rozsah znaků na malá písmena. |
toupper | Převede znak nebo rozsah znaků na velká písmena. |
rozšířit | Převede znak typu char v nativní znakové sadě na odpovídající znak typu CharType používaný národním prostředím. |
Požadavky
Záhlaví:<národní prostředí>
Obor názvů: std
ctype::char_type
Typ, který popisuje znak používaný národním prostředním.
typedef CharType char_type;
Poznámky
Typ je synonymem parametru šablony CharType.
Příklad
Podívejte se na rozšíření členské funkce pro příklad, který se používá char_type
jako návratová hodnota.
ctype::ctype
Konstruktor pro objekty třídy ctype, které slouží jako omezující vlastnosti národního prostředí pro znaky.
explicit ctype(size_t _Refs = 0);
Parametry
_Refs
Celočíselná hodnota použitá k určení typu správy paměti pro objekt.
Poznámky
Možné hodnoty pro parametr _Refs a jejich významnost jsou:
0: Životnost objektu je spravována národními prostředími, které ho obsahují.
1: Životnost objektu musí být spravována ručně.
> 1: Tyto hodnoty nejsou definovány.
Nejsou možné žádné přímé příklady, protože destruktor je chráněn.
Konstruktor inicializuje svůj locale::facet
základní objekt s národním prostředím ::facet( _Refs
).
ctype::d o_is
Virtuální funkce volaná k ověření, zda má jeden znak konkrétní atribut, nebo ke klasifikaci atributů v jednotlivých kontejnerech v rozsahu a jejich uložení v poli.
virtual bool do_is(
mask maskVal,
CharType ch) const;
virtual const CharType *do_is(
const CharType* first,
const CharType* last,
mask* dest) const;
Parametry
maskVal
Hodnota masky, pro kterou má být znak testován.
ch
Znak, jehož atributy se mají testovat.
první
Ukazatel na první znak v oblasti, jejíž atributy mají být klasifikovány.
poslední
Ukazatel na znak bezprostředně za posledním znakem v oblasti, jejíž atributy mají být klasifikovány.
dest
Ukazatel na začátek pole, kde se hodnoty masky označující atributy každého z znaků mají být uloženy.
Návratová hodnota
První členská funkce vrátí logickou hodnotu, která je true
v případě, že testovaný znak má atribut popsaný hodnotou masky; false
pokud atribut nemá.
Druhá členová funkce vrátí matici obsahující hodnoty masky, které charakterizují atributy jednotlivých znaků v oblasti.
Poznámky
Hodnoty masky klasifikující atributy znaků jsou poskytovány třídou ctype_base, ze které ctype odvozuje. První členová funkce může přijímat výrazy pro první parametr, který se označuje jako bitová maska, a vytvořit z kombinace hodnot masky bitovými operátory (|
, &
, ^
, ~
).
Příklad
Podívejte se na příklad, který volá do_is
.
ctype::d o_narrow
Virtuální funkce volána k převodu znaku typu CharType
používaného národním prostředím na odpovídající znak typu char
v nativní znakové sadě.
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;
Parametry
ch
Znak typu Chartype
používaný národním prostředím, který má být převeden.
default
Výchozí hodnota, kterou má členová funkce přiřadit znakům typu CharType
, které nemají protějškové znaky typu char
.
první
Ukazatel na první znak v rozsahu znaků, který se má převést.
poslední
Ukazatel na znak bezprostředně za posledním znakem v rozsahu znaků, který se má převést.
dest
Ukazatel const na první znak typu char
v cílovém rozsahu, který ukládá převedenou oblast znaků.
Návratová hodnota
První chráněná členová funkce vrátí nativní znak znaku typu, který odpovídá znaku parametru typu CharType
nebo výchozí , pokud není definován žádný protějšek.
Druhá chráněná členová funkce vrátí ukazatel na cílový rozsah nativních znaků převedených ze znaků typu CharType
.
Poznámky
Druhá chráněná funkce šablony člena ukládá do [ ] hodnota do_narrow
( first
[ I
], default
), pro I
interval [0,first
- last
). I
dest
Příklad
Podívejte se na příklad zúžení, které volá do_narrow
.
ctype::d o_scan_is
Virtuální funkce volaná k vyhledání prvního znaku v rozsahu, který odpovídá zadané masce.
virtual const CharType *do_scan_is(
mask maskVal,
const CharType* first,
const CharType* last) const;
Parametry
maskVal
Hodnota masky, která se má shodovat znakem.
první
Ukazatel na první znak v oblasti, který se má naskenovat.
poslední
Ukazatel na znak bezprostředně za posledním znakem v oblasti, který chcete zkontrolovat.
Návratová hodnota
Ukazatel na první znak v oblasti, která odpovídá zadané masce. Pokud žádná taková hodnota neexistuje, vrátí funkce poslední hodnotu.
Poznámky
Chráněná členová funkce vrátí nejmenší ukazatel ptr
v rozsahu [ first
, last
), pro který do_is( maskVal
, * ptr
) je true.
Příklad
Podívejte se na příklad scan_is, který volá do_scan_is
.
ctype::d o_scan_not
Virtuální funkce volaná k vyhledání prvního znaku v rozsahu, který neodpovídá zadané masce.
virtual const CharType *do_scan_not(
mask maskVal,
const CharType* first,
const CharType* last) const;
Parametry
maskVal
Hodnota masky, která se neshoduje znakem.
první
Ukazatel na první znak v oblasti, který se má naskenovat.
poslední
Ukazatel na znak bezprostředně za posledním znakem v oblasti, který chcete zkontrolovat.
Návratová hodnota
Ukazatel na první znak v oblasti, která neodpovídá zadané masce. Pokud žádná taková hodnota neexistuje, vrátí funkce poslední hodnotu.
Poznámky
Chráněná členová funkce vrátí nejmenší ukazatel ptr
v rozsahu [ , first
last
) pro který do_is( maskVal
, * ptr
) je false.
Příklad
Podívejte se na příklad scan_not, který volá do_scan_not
.
ctype::d o_tolower
Virtuální funkce volaná k převodu znaku nebo rozsahu znaků na malá písmena.
virtual CharType do_tolower(CharType ch) const;
virtual const CharType *do_tolower(
CharType* first,
const CharType* last) const;
Parametry
ch
Znak, který se má převést na malá písmena.
první
Ukazatel na první znak v oblasti znaků, jejichž případy mají být převedeny.
poslední
Ukazatel na znak bezprostředně za posledním znakem v oblasti znaků, jejichž případy se mají převést.
Návratová hodnota
První chráněná členová funkce vrátí malá písmena parametru ch. Pokud neexistuje žádný formulář malými písmeny, vrátí hodnotu ch. Druhá chráněná členová funkce vrátí poslední.
Poznámky
Druhá chráněná funkce šablony nahrazuje každý prvek first
[ ], pro I
v intervalu [0, - last
first
), s do_tolower
( first
[ I
]). I
Příklad
Podívejte se na příklad pro tolower, který volá do_tolower
.
ctype::d o_toupper
Virtuální funkce volaná k převedení znaku nebo rozsahu znaků na velká písmena.
virtual CharType do_toupper(CharType ch) const;
virtual const CharType *do_toupper(
CharType* first,
const CharType* last) const;
Parametry
ch
Znak, který se má převést na velká písmena.
první
Ukazatel na první znak v oblasti znaků, jejichž případy mají být převedeny.
poslední
Ukazatel na znak bezprostředně za posledním znakem v oblasti znaků, jejichž případy se mají převést.
Návratová hodnota
První chráněná členová funkce vrátí velká písmena parametru ch. Pokud neexistuje žádný velká písmena, vrátí hodnotu ch. Druhá chráněná členová funkce vrátí poslední.
Poznámky
Druhá chráněná funkce šablony nahrazuje každý prvek first
[ ], pro I
v intervalu [0, - last
first
), s do_toupper
( first
[ I
]). I
Příklad
Podívejte se na příklad toupperu, který volá do_toupper
.
ctype::d o_widen
Virtuální funkce volána k převodu znaku typu char
v nativní znakové sadě na odpovídající znak typu CharType
používaný národním prostředím.
virtual CharType do_widen(char byte) const;
virtual const char *do_widen(
const char* first,
const char* last,
CharType* dest) const;
Parametry
byte
Znak typu char
v nativní znakové sadě, který se má převést.
první
Ukazatel na první znak v rozsahu znaků, který se má převést.
poslední
Ukazatel na znak bezprostředně za posledním znakem v rozsahu znaků, který se má převést.
dest
Ukazatel na první znak typu CharType
v cílovém rozsahu, který ukládá převedenou oblast znaků.
Návratová hodnota
První chráněná členová funkce vrátí znak typu CharType
, který odpovídá znaku parametru nativního typu char
.
Druhá chráněná členová funkce vrátí ukazatel na cílový rozsah znaků typu CharType
používaného národním prostředím převedeným z nativních znaků typu char
.
Poznámky
Druhá chráněná funkce šablony člena ukládá I
[ ] hodnotu do_widen
( first
[ I
]), pro I
interval [0,first
last
- ).dest
Příklad
Podívejte se na příklad rozšíření, který volá do_widen
.
ctype::is
Testuje, zda jeden znak má určitý atribut nebo klasifikuje atributy každého znaku v oblasti a ukládá je do pole.
bool is(mask maskVal, CharType ch) const;
const CharType *is(
const CharType* first,
const CharType* last,
mask* dest) const;
Parametry
maskVal
Hodnota masky, pro kterou má být znak testován.
ch
Znak, jehož atributy se mají testovat.
první
Ukazatel na první znak v oblasti, jejíž atributy mají být klasifikovány.
poslední
Ukazatel na znak bezprostředně za posledním znakem v oblasti, jejíž atributy mají být klasifikovány.
dest
Ukazatel na začátek pole, kde se hodnoty masky označující atributy každého z znaků mají být uloženy.
Návratová hodnota
První členová funkce vrátí true
, pokud má testovaný znak atribut popsaný hodnotou masky; false
pokud atribut nemá.
Druhá členová funkce vrátí ukazatel na poslední znak v oblasti, jejíž atributy mají být klasifikovány.
Poznámky
Hodnoty masky klasifikující atributy znaků jsou poskytovány třídou ctype_base Třída, ze které ctype odvozuje. První členová funkce může přijímat výrazy pro první parametr, který se označuje jako bitová maska, a vytvořit z kombinace hodnot masky bitovými operátory (|
, &
, ^
, ~
).
Příklad
// 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
Převede znaky typu CharType
používané národním prostředím na odpovídající znaky typu char
v nativní znakové sadě.
char narrow(CharType ch, char default = '\0') const;
const CharType* narrow(
const CharType* first,
const CharType* last,
char default,
char* dest) const;
Parametry
ch
Znak typu Chartype
používaný národním prostředím, který má být převeden.
default
Výchozí hodnota, kterou má členová funkce přiřadit znakům typu CharType
, které nemají protějškové znaky typu char
.
první
Ukazatel na první znak v rozsahu znaků, který se má převést.
poslední
Ukazatel na znak bezprostředně za posledním znakem v rozsahu znaků, který se má převést.
dest
Ukazatel const na první znak typu char
v cílovém rozsahu, který ukládá převedenou oblast znaků.
Návratová hodnota
První členová funkce vrátí nativní znak typu char
, který odpovídá znaku parametru typu CharType default
, pokud není definován.
Druhá členová funkce vrátí ukazatel na cílový rozsah nativních znaků převedených z znaků typu CharType
.
Poznámky
První členová funkce vrátí do_narrow(ch
, default
). Druhá členová funkce vrátí do_narrow (first
, last
, default
, dest
). Pouze základní zdrojové znaky jsou zaručeny, že mají jedinečný inverzní obrázek CharType
pod narrow
. Pro tyto základní zdrojové znaky platí následující invariantní: narrow
( rozšiřující ( c ), 0 ) == c.
Příklad
// 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
Vyhledá první znak v rozsahu, který odpovídá zadané masce.
const CharType *scan_is(
mask maskVal,
const CharType* first,
const CharType* last) const;
Parametry
maskVal
Hodnota masky, která se má shodovat znakem.
první
Ukazatel na první znak v oblasti, který se má naskenovat.
poslední
Ukazatel na znak bezprostředně za posledním znakem v oblasti, který chcete zkontrolovat.
Návratová hodnota
Ukazatel na první znak v oblasti, která odpovídá zadané masce. Pokud žádná taková hodnota neexistuje, vrátí funkce poslední hodnotu.
Poznámky
Členová funkce vrátí do_scan_is(maskVal
, first
, last
).
Příklad
// 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
Vyhledá první znak v rozsahu, který neodpovídá zadané masce.
const CharType *scan_not(
mask maskVal,
const CharType* first,
const CharType* last) const;
Parametry
maskVal
Hodnota masky, která se neshoduje znakem.
první
Ukazatel na první znak v oblasti, který se má naskenovat.
poslední
Ukazatel na znak bezprostředně za posledním znakem v oblasti, který chcete zkontrolovat.
Návratová hodnota
Ukazatel na první znak v oblasti, která neodpovídá zadané masce. Pokud žádná taková hodnota neexistuje, vrátí funkce poslední hodnotu.
Poznámky
Členová funkce vrátí do_scan_not(maskVal
, first
, last
).
Příklad
// 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
Převede znak nebo rozsah znaků na malá písmena.
CharType tolower(CharType ch) const;
const CharType *tolower(CharType* first, const CharType* last) const;
Parametry
ch
Znak, který se má převést na malá písmena.
první
Ukazatel na první znak v oblasti znaků, jejichž případy mají být převedeny.
poslední
Ukazatel na znak bezprostředně za posledním znakem v oblasti znaků, jejichž případy se mají převést.
Návratová hodnota
První členová funkce vrátí malá písmena parametru ch. Pokud neexistuje žádný formulář malými písmeny, vrátí hodnotu ch.
Druhá členová funkce vrátí poslední.
Poznámky
První členová funkce vrátí do_tolower(ch
). Druhá členová funkce vrátí do_tolower(first
, last
).
Příklad
// 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
Převede znak nebo rozsah znaků na velká písmena.
CharType toupper(CharType ch) const;
const CharType *toupper(CharType* first, const CharType* last) const;
Parametry
ch
Znak, který se má převést na velká písmena.
první
Ukazatel na první znak v oblasti znaků, jejichž případy mají být převedeny.
poslední
Ukazatel na znak bezprostředně za posledním znakem v oblasti znaků, jejichž případy se mají převést.
Návratová hodnota
První členová funkce vrátí velká písmena parametru ch. Pokud neexistuje žádný velká písmena, vrátí hodnotu ch.
Druhá členová funkce vrátí poslední.
Poznámky
První členová funkce vrátí do_toupper(ch
). Druhá členová funkce vrátí do_toupper( first
, last
).
Příklad
// 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
Převede znak typu char
v nativní znakové sadě na odpovídající znak typu CharType
používaný národním prostředím.
CharType widen(char byte) const;
const char *widen(const char* first, const char* last, CharType* dest) const;
Parametry
byte
Znak typu char v nativní znakové sadě, který se má převést.
první
Ukazatel na první znak v rozsahu znaků, který se má převést.
poslední
Ukazatel na znak bezprostředně za posledním znakem v rozsahu znaků, který se má převést.
dest
Ukazatel na první znak typu CharType
v cílovém rozsahu, který ukládá převedenou oblast znaků.
Návratová hodnota
První členová funkce vrátí znak typu CharType
, který odpovídá znaku parametru nativního typu char
.
Druhá členová funkce vrátí ukazatel na cílový rozsah znaků typu CharType
používaného národním prostředím převedeným z nativních znaků typu char
.
Poznámky
První členová funkce vrátí do_widen(byte
). Druhá členová funkce vrátí do_widen(first
, last
, dest
).
Příklad
// 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!
Viz také
<locale>
Bezpečný přístup z více vláken ve standardní knihovně C++