ctype-klass

En klass som tillhandahåller en aspekt som används för att klassificera tecken, konvertera från övre och nedre fall och konvertera mellan den inbyggda teckenuppsättningen och den uppsättning som används av språkvarianten.

Syntax

template <class CharType>
class ctype : public ctype_base;

Parameterar

CharType
Den typ som används i ett program för att koda tecken.

Anmärkningar

Precis som med alla nationella aspekter har det statiska objekt-ID:t ett initialt lagrat värde på noll. Det första försöket att komma åt dess lagrade värde lagrar ett unikt positivt värde i id. Klassificeringskriterier tillhandahålls som en kapslad bitmasktyp i basklassen ctype_base.

C++-standardbiblioteket definierar två explicita specialiseringar för den här klassmallen:

  • ctype<char>, en explicit specialisering vars skillnader beskrivs separat. Mer information finns i ctype<char> Class.

  • ctype<wchar_t>, som behandlar element som breda tecken.

Andra specialiseringar av klassmall:ctype<CharType>

  • Konvertera ett värde ch av typen CharType till ett värde av typen char med uttrycket (char)ch.

  • Konvertera ett värdebyte av typen char till ett värde av typen CharType med uttrycket CharType(byte).

Alla andra åtgärder utförs på värden på char samma sätt som för den explicita specialiseringen ctype<char>.

Konstruktörer

Konstruktor Beskrivning
ctype Konstruktor för objekt av klass ctype som fungerar som språkvarianter för tecken.

Typedefs

Typnamn Beskrivning
char_type En typ som beskriver ett tecken som används av ett språk.

Medlemsfunktioner

Medlemsfunktion Beskrivning
do_is En virtuell funktion som anropas för att testa om ett enskilt tecken har ett visst attribut eller klassificera attributen för varje tecken i ett intervall och lagrar dem i en matris.
do_narrow En virtuell funktion som anropas för att konvertera ett tecken av typen CharType som används av ett språk till motsvarande tecken av typen char i den interna teckenuppsättningen.
do_scan_is En virtuell funktion som anropas för att hitta det första tecknet i ett intervall som matchar en angiven mask.
do_scan_not En virtuell funktion som anropas för att hitta det första tecknet i ett intervall som inte matchar en angiven mask.
do_tolower En virtuell funktion som anropas för att konvertera ett tecken eller ett intervall med tecken till deras gemener.
do_toupper En virtuell funktion som anropas för att konvertera ett tecken eller ett intervall med tecken till versaler.
do_widen En virtuell funktion som anropas för att konvertera ett tecken av typen char i det inbyggda tecknet till motsvarande tecken av typen CharType som används av en språkvariant.
vara Testar om ett enskilt tecken har ett visst attribut eller klassificerar attributen för varje tecken i ett intervall och lagrar dem i en matris.
trång Konverterar ett tecken av typen CharType som används av ett språk till motsvarande tecken av typen char i den interna teckenuppsättningen.
scan_is Letar upp det första tecknet i ett intervall som matchar en angiven mask.
scan_not Letar upp det första tecknet i ett intervall som inte matchar en angiven mask.
tolower Konverterar ett tecken eller ett teckenintervall till gemener.
toupper Konverterar ett tecken eller ett intervall med tecken till versaler.
bredda Konverterar ett tecken av typen char i det inbyggda tecknet till motsvarande tecken av typen CharType som används av ett språk.

Kravspecifikation

Rubrik:<Locale>

namnområde: std

ctype::char_type

En typ som beskriver ett tecken som används av ett språk.

typedef CharType char_type;

Anmärkningar

Typen är en synonym för mallparametern CharType.

Exempel

Se medlemsfunktionens bredd för ett exempel som använder char_type som ett returvärde.

ctype::ctype

Konstruktor för objekt av klass ctype som fungerar som språkfasetter för tecken.

explicit ctype(size_t _Refs = 0);

Parameterar

_Refs
Heltalsvärde som används för att ange typ av minneshantering för objektet.

Anmärkningar

Möjliga värden för parametern _Refs och deras betydelse är:

  • 0: Objektets livslängd hanteras av de nationella inställningar som innehåller det.

  • 1: Objektets livslängd måste hanteras manuellt.

  • > 1: Dessa värden har inte definierats.

Inga direkta exempel är möjliga, eftersom destructor är skyddad.

Konstruktorn initierar sitt locale::facet basobjekt med språkvariant::facet(_Refs).

ctype::d o_is

En virtuell funktion som anropas för att testa om ett enskilt tecken har ett visst attribut eller klassificera attributen för varje tecken i ett intervall och lagrar dem i en matris.

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

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

Parameterar

maskVal
Maskvärdet som tecknet ska testas för.

Ch
Tecknet vars attribut ska testas.

första
En pekare till det första tecknet i intervallet vars attribut ska klassificeras.

senaste
En pekare till tecknet omedelbart efter det sista tecknet i intervallet vars attribut ska klassificeras.

dest
En pekare till början av matrisen där maskvärdena som karakteriserar attributen för vart och ett av tecknen ska lagras.

Returvärde

Den första medlemsfunktionen returnerar ett booleskt värde som är true om det testade tecknet har det attribut som beskrivs av maskvärdet. false Om det inte finns attributet.

Den andra medlemsfunktionen returnerar en matris som innehåller maskvärdena som karakteriserar attributen för vart och ett av tecknen i intervallet.

Anmärkningar

Maskvärdena som klassificerar tecknens attribut tillhandahålls av klassen ctype_base, från vilken ctype härleds. Den första medlemsfunktionen kan acceptera uttryck för den första parametern som kallas bitmasker och bildas från kombinationen av maskvärden av bitvis operatorerna (|, &, ^, ~).

Exempel

Se exemplet för är, som anropar do_is.

ctype::d o_narrow

En virtuell funktion som anropas för att konvertera ett tecken av typen CharType som används av ett språk till motsvarande tecken av typen char i den interna teckenuppsättningen.

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;

Parameterar

Ch
Tecknet av typen Chartype som används av språkvarianten som ska konverteras.

förvalt
Standardvärdet som ska tilldelas av medlemsfunktionen till tecken av typen CharType som inte har motsvarande tecken av typen char.

första
En pekare till det första tecknet i området med tecken som ska konverteras.

senaste
En pekare till tecknet omedelbart efter det sista tecknet i området med tecken som ska konverteras.

dest
En const-pekare till det första tecknet av typen char i målintervallet som lagrar det konverterade teckenområdet.

Returvärde

Den första skyddade medlemsfunktionen returnerar det inbyggda tecknet för typtecken som motsvarar parametertecknet av typen CharType eller standardvärdet om ingen motsvarighet har definierats.

Den andra skyddade medlemsfunktionen returnerar en pekare till målintervallet med inbyggda tecken som konverterats från tecken av typen CharType.

Anmärkningar

Den andra funktionen för skyddad medlemsmall lagrar i dest[ ] värdet I(do_narrow [ first], I), för default i intervallet [0, Ilast - ). first

Exempel

Se exemplet för narrow, som anropar do_narrow.

ctype::d o_scan_is

En virtuell funktion som anropas för att hitta det första tecknet i ett intervall som matchar en angiven mask.

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

Parameterar

maskVal
Maskvärdet som ska matchas av ett tecken.

första
En pekare till det första tecknet i intervallet som ska genomsökas.

senaste
En pekare till tecknet omedelbart efter det sista tecknet i intervallet som ska genomsökas.

Returvärde

En pekare till det första tecknet i ett intervall som matchar en angiven mask. Om det inte finns något sådant värde returnerar funktionen sist.

Anmärkningar

Funktionen skyddad medlem returnerar den minsta pekaren ptr i intervallet [ first, last) som do_is(maskVal, * ptr) är sant för.

Exempel

Se exemplet för scan_is, som anropar do_scan_is.

ctype::d o_scan_not

En virtuell funktion som anropas för att hitta det första tecknet i ett intervall som inte matchar en angiven mask.

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

Parameterar

maskVal
Maskvärdet ska inte matchas av ett tecken.

första
En pekare till det första tecknet i intervallet som ska genomsökas.

senaste
En pekare till tecknet omedelbart efter det sista tecknet i intervallet som ska genomsökas.

Returvärde

En pekare till det första tecknet i ett intervall som inte matchar en angiven mask. Om det inte finns något sådant värde returnerar funktionen sist.

Anmärkningar

Funktionen skyddad medlem returnerar den minsta pekaren ptr i intervallet [ first, last) som do_is(maskVal, * ptr) är false för.

Exempel

Se exemplet för scan_not, som anropar do_scan_not.

ctype::d o_tolower

En virtuell funktion som anropas för att konvertera ett tecken eller ett teckenintervall till gemener.

virtual CharType do_tolower(CharType ch) const;

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

Parameterar

Ch
Tecknet som ska konverteras till gemener.

första
En pekare till det första tecknet i intervallet med tecken vars fall ska konverteras.

senaste
En pekare till tecknet omedelbart efter det sista tecknet i intervallet med tecken vars fall ska konverteras.

Returvärde

Den första skyddade medlemsfunktionen returnerar den gemena formen av parametern ch. Om det inte finns något gemener returnerar det ch. Den andra skyddade medlemsfunktionen returnerar sist.

Anmärkningar

Den andra funktionen för skyddad medlemsmall ersätter varje element first [ I], för I i intervallet [0, last - first), med do_tolower(first [ I]).

Exempel

Se exemplet för tolower, som anropar do_tolower.

ctype::d o_toupper

En virtuell funktion som anropas för att konvertera ett tecken eller ett intervall med tecken till versaler.

virtual CharType do_toupper(CharType ch) const;

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

Parameterar

Ch
Tecknet som ska konverteras till versaler.

första
En pekare till det första tecknet i intervallet med tecken vars fall ska konverteras.

senaste
En pekare till tecken omedelbart efter det sista tecknet i intervallet med tecken vars fall ska konverteras.

Returvärde

Den första skyddade medlemsfunktionen returnerar versaler i parametern ch. Om det inte finns något versalformulär returneras ch. Den andra skyddade medlemsfunktionen returnerar sist.

Anmärkningar

Den andra funktionen för skyddad medlemsmall ersätter varje element first [ I], för I i intervallet [0, last - first), med do_toupper(first [ I]).

Exempel

Se exemplet för toupper, som anropar do_toupper.

ctype::d o_widen

En virtuell funktion som anropas för att konvertera ett tecken av typen char i det inbyggda tecknet till motsvarande tecken av typen CharType som används av en språkvariant.

virtual CharType do_widen(char byte) const;

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

Parameterar

byte
Tecknet av typen char i den inbyggda teckenuppsättningen som ska konverteras.

första
En pekare till det första tecknet i området med tecken som ska konverteras.

senaste
En pekare till tecknet omedelbart efter det sista tecknet i området med tecken som ska konverteras.

dest
En pekare till det första tecknet av typen CharType i målintervallet som lagrar det konverterade teckenområdet.

Returvärde

Den första skyddade medlemsfunktionen returnerar tecknet av typen CharType som motsvarar parametertecknet för den interna typen char.

Den andra skyddade medlemsfunktionen returnerar en pekare till målintervallet med tecken av typen CharType som används av ett språk som konverterats från inbyggda tecken av typen char.

Anmärkningar

Den andra funktionen för skyddad medlemsmall lagrar i dest[ ] värdet I(do_widen[ first]), för I i intervallet [0, Ilast - ). first

Exempel

Se exemplet för widen, som anropar do_widen.

ctype::is

Testar om ett enskilt tecken har ett visst attribut eller klassificerar attributen för varje tecken i ett intervall och lagrar dem i en matris.

bool is(mask maskVal, CharType ch) const;

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

Parameterar

maskVal
Maskvärdet som tecknet ska testas för.

Ch
Tecknet vars attribut ska testas.

första
En pekare till det första tecknet i intervallet vars attribut ska klassificeras.

senaste
En pekare till tecknet omedelbart efter det sista tecknet i intervallet vars attribut ska klassificeras.

dest
En pekare till början av matrisen där maskvärdena som karakteriserar attributen för vart och ett av tecknen ska lagras.

Returvärde

Den första medlemsfunktionen returnerar true om det testade tecknet har attributet som beskrivs av maskvärdet. false Om det inte finns attributet.

Den andra medlemsfunktionen returnerar en pekare till det sista tecknet i intervallet vars attribut ska klassificeras.

Anmärkningar

Maskvärdena som klassificerar tecknens attribut tillhandahålls av klassen ctype_base Class, från vilken ctype härleds. Den första medlemsfunktionen kan acceptera uttryck för den första parametern som kallas bitmasker och bildas från kombinationen av maskvärden av bitvis operatorerna (|, &, ^, ~).

Exempel

// 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

Konverterar tecken av typen CharType som används av ett språk till motsvarande tecken av typen char i den interna teckenuppsättningen.

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

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

Parameterar

Ch
Tecknet av typen Chartype som används av språkvarianten som ska konverteras.

förvalt
Standardvärdet som ska tilldelas av medlemsfunktionen till tecken av typen CharType som inte har motsvarande tecken av typen char.

första
En pekare till det första tecknet i området med tecken som ska konverteras.

senaste
En pekare till tecknet omedelbart efter det sista tecknet i området med tecken som ska konverteras.

dest
En const-pekare till det första tecknet av typen char i målintervallet som lagrar det konverterade teckenområdet.

Returvärde

Den första medlemsfunktionen returnerar det inbyggda tecknet av typen char som motsvarar parametertecknet av typen CharType default om inte motsvarighet definieras.

Den andra medlemsfunktionen returnerar en pekare till målintervallet med inbyggda tecken som konverterats från tecken av typen CharType.

Anmärkningar

Den första medlemsfunktionen returnerar do_narrow(ch, default). Den andra medlemsfunktionen returnerar do_narrow (first, , lastdefault, dest). Det är bara de grundläggande källtecken som garanterat har en unik inverterad bild CharType under narrow. För dessa grundläggande källtecken gäller följande invariant: narrow ( widen ( c ), 0 ) == c.

Exempel

// 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

Letar upp det första tecknet i ett intervall som matchar en angiven mask.

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

Parameterar

maskVal
Maskvärdet som ska matchas av ett tecken.

första
En pekare till det första tecknet i intervallet som ska genomsökas.

senaste
En pekare till tecknet omedelbart efter det sista tecknet i intervallet som ska genomsökas.

Returvärde

En pekare till det första tecknet i ett intervall som matchar en angiven mask. Om det inte finns något sådant värde returnerar funktionen sist.

Anmärkningar

Medlemsfunktionen returnerar do_scan_is(maskVal, first, last).

Exempel

// 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

Letar upp det första tecknet i ett intervall som inte matchar en angiven mask.

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

Parameterar

maskVal
Maskvärdet ska inte matchas av ett tecken.

första
En pekare till det första tecknet i intervallet som ska genomsökas.

senaste
En pekare till tecknet omedelbart efter det sista tecknet i intervallet som ska genomsökas.

Returvärde

En pekare till det första tecknet i ett intervall som inte matchar en angiven mask. Om det inte finns något sådant värde returnerar funktionen sist.

Anmärkningar

Medlemsfunktionen returnerar do_scan_not(maskVal, first, last).

Exempel

// 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

Konverterar ett tecken eller ett teckenintervall till gemener.

CharType tolower(CharType ch) const;

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

Parameterar

Ch
Tecknet som ska konverteras till gemener.

första
En pekare till det första tecknet i intervallet med tecken vars fall ska konverteras.

senaste
En pekare till tecknet omedelbart efter det sista tecknet i intervallet med tecken vars fall ska konverteras.

Returvärde

Den första medlemsfunktionen returnerar den gemena formen av parametern ch. Om det inte finns något gemener returnerar det ch.

Den andra medlemsfunktionen returnerar sist.

Anmärkningar

Den första medlemsfunktionen returnerar do_tolower(ch). Den andra medlemsfunktionen returnerar do_tolower(first, last).

Exempel

// 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

Konverterar ett tecken eller ett intervall med tecken till versaler.

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

Parameterar

Ch
Tecknet som ska konverteras till versaler.

första
En pekare till det första tecknet i intervallet med tecken vars fall ska konverteras.

senaste
En pekare till tecknet omedelbart efter det sista tecknet i intervallet med tecken vars fall ska konverteras.

Returvärde

Den första medlemsfunktionen returnerar versaler i parametern ch. Om det inte finns något versalformulär returneras ch.

Den andra medlemsfunktionen returnerar sist.

Anmärkningar

Den första medlemsfunktionen returnerar do_toupper(ch). Den andra medlemsfunktionen returnerar do_toupper(first, last).

Exempel

// 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

Konverterar ett tecken av typen char i det inbyggda tecknet till motsvarande tecken av typen CharType som används av ett språk.

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

Parameterar

byte
Tecken av typen char i den inbyggda teckenuppsättningen som ska konverteras.

första
En pekare till det första tecknet i området med tecken som ska konverteras.

senaste
En pekare till tecknet omedelbart efter det sista tecknet i området med tecken som ska konverteras.

dest
En pekare till det första tecknet av typen CharType i målintervallet som lagrar det konverterade teckenområdet.

Returvärde

Den första medlemsfunktionen returnerar tecknet av typen CharType som motsvarar parametertecknet för den interna typen char.

Den andra medlemsfunktionen returnerar en pekare till målintervallet med tecken av typen CharType som används av ett språk som konverterats från inbyggda tecken av typen char.

Anmärkningar

Den första medlemsfunktionen returnerar do_widen(byte). Den andra medlemsfunktionen returnerar do_widen(first, last, dest).

Exempel

// 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!

Se även

<Locale>
Trådsäkerhet i C++ Standard Library