Personal tools
ctype




Click on the banner to return to the class reference home page.
ctype
ctype_base ctype...
locale::facet
- Summary
- Data Type and Member Function Indexes
- Synopsis
- Specialization
- Description
- Interface
- Type
- Constructor and Destructor
- Public Member Functions
- Facet ID
- Protected Member Functions
- Example
- See Also
Summary
A facet that provides character classification facilities.
Data Type and Member Function Indexes
(exclusive of constructors and destructors)
| Data Types |
| id |
| Member Functions | |
| char_type do_is() do_narrow() do_scan_is() do_scan_not() do_tolower() do_toupper() do_widen() is() narrow() |
scan_is() scan_not() tolower() toupper() widen() |
Synopsis
#include <locale> class ctype_base; template <class charT> class ctype;
Specialization
class ctype<char>;
Description
ctype<charT> is the character classification facet. This facet provides facilities for classifying characters and performing simple conversions. ctype<charT> provides conversions for upper to lower and lower to upper case. The facet also provides conversions between charT, and char. ctype<charT> relies on ctype_base for a set of masks that identify the various classes of characters. These classes are:
-
space
cntrl
upper
lower
alpha
digit
punct
xdigit
alnum
graph
The masks are passed to member functions of ctype in order to obtain verify the classifications of a character or range of characters.
Interface
class ctype_base {
public:
enum mask {
space, print, cntrl, upper, lower,
alpha, digit, punct, xdigit,
alnum=alpha|digit, graph=alnum|punct
};
};
template <class charT>
class ctype : public locale::facet, public ctype_base {
public:
typedef charT char_type;
explicit ctype(size_t);
bool is(mask, charT) const;
const charT* is(const charT*,
const charT*, mask*) const;
const charT* scan_is(mask,
const charT*,
const charT*) const;
const charT* scan_not(mask,
const charT*,
const charT*) const;
charT toupper(charT) const;
const charT* toupper(charT*, const charT*) const;
charT tolower(charT) const;
const charT* tolower(charT*, const charT*) const;
charT widen(char) const;
const char* widen(const char*,
const char*, charT*) const;
char narrow(charT, char) const;
const charT* narrow(const charT*, const charT*,
char, char*) const;
static locale::id id;
protected:
~ctype(); // virtual
virtual bool do_is(mask, charT) const;
virtual const charT* do_is(const charT*,
const charT*,
mask*) const;
virtual const charT* do_scan_is(mask,
const charT*,
const charT*) const;
virtual const charT* do_scan_not(mask,
const charT*,
const charT*) const;
virtual charT do_toupper(charT) const;
virtual const charT* do_toupper(charT*,
const charT*) const;
virtual charT do_tolower(charT) const;
virtual const charT* do_tolower(charT*,
const charT*) const;
virtual charT do_widen(char) const;
virtual const char* do_widen(const char*,
const char*,
charT*) const;
virtual char do_narrow(charT, char) const;
virtual const charT* do_narrow(const charT*,
const charT*,
char, char*) const;
};
Type
char_type
Type of character the facet is instantiated on.
Constructor and Destructor
explicit ctype(size_t refs = 0)
Construct a ctype facet. If the refs argument is 0 then destruction of the object is delegated to the locale, or locales, containing it. This allows the user to ignore lifetime management issues. On the other had, if refs is 1 then the object must be explicitly deleted; the locale will not do so. In this case, the object can be maintained across the lifetime of multiple locales.
~ctype(); // virtual and protected
Destroy the facet.
Public Member Functions
The public members of the ctype facet provide an interface to protected members. Each public member xxx has a corresponding virtual protected member do_xxx. All work is delegated to these protected members. For instance, the public widen function simply calls its protected cousin do_widen.
bool is(mask m, charT c) const; const charT* is(const charT* low, const charT* high, mask* vec) const;
Returns do_is(m,c) or do_is(low,high,vec).
char
narrow(charT c, char dfault) const;
const charT*
narrow(const charT* low, const charT*, char dfault,
char* to) const;
Returns do_narrow(c,dfault) or do_narrow(low,high,dfault,to).
const charT* scan_is(mask m, const charT*, const charT* high) const;
Returns do_scan_is(m,low,high).
const charT* scan_not(mask m, const charT* low, const charT* high) const;
Returns do_scan_not(m,low,high).
charT tolower(charT c) const; const charT* tolower(charT* low, const charT* high) const;
Returns do_tolower(c) or do_tolower(low,high).
charT toupper(charT) const; const charT* toupper(charT* low, const charT* high) const;
Returns do_toupper(c) or do_toupper(low,high).
charT widen(char c) const; const char* widen(const char* low, const char* high, charT* to) const;
Returns do_widen(c) or do_widen(low,high,to).
Facet ID
static locale::id id;
Unique identifier for this type of facet.
Protected Member Functions
virtual bool do_is(mask m, charT c) const;
Returns true if c matches the classification indicated by the mask m, where m is one of the values available from ctype_base. For instance, the following call returns true since 'a' is an alphabetic character:
ctype<char>().is(ctype_base::alpha,'a');
See ctype_base for a description of the masks.
virtual const charT*
do_is(const charT* low, const charT* high,
mask* vec) const;
Fills vec with every mask from ctype_base that applies to the range of characters indicated by [low,high). See ctype_base for a description of the masks. For instance, after the following call v would contain {alpha, lower, print,alnum ,graph}:
char a[] = "abcde"; ctype_base::mask v[12]; ctype<char>().is(a,a+5,v);
This function returns high.
virtual char do_narrow(charT, char dfault) const;
Returns the appropriate char representation for c, if such exists. Otherwise do_narrow returns dfault.
virtual const charT*
do_narrow(const charT* low, const charT* high,
char dfault, char* dest) const;
Converts each character in the range [low,high) to its char representation, if such exists. If a char representation is not available then the character will be converted to dfault. Returns high.
virtual const charT* do_scan_is(mask m, const charT* low, const charT* high) const;
Finds the first character in the range [low,high) that matches the classification indicated by the mask m.
virtual const charT* do_scan_not(mask m, const charT* low, const charT* high) const;
Finds the first character in the range [low,high) that does not match the classification indicated by the mask m.
virtual charT do_tolower(charT) const;
Returns the lower case representation of c, if such exists, otherwise returns c;
virtual const charT* do_tolower(charT* low, const charT* high) const;
Converts each character in the range [low,high) to its lower case representation, if such exists. If a lower case representation does not exist then the character is not changed. Returns high.
virtual charT do_toupper(charT c) const;
Returns the upper case representation of c, if such exists, otherwise returns c;
virtual const charT* do_toupper(charT* low, const charT* high) const;
Converts each character in the range [low,high) to its upper case representation, if such exists. If an upper case representation does not exist then the character is not changed. Returns high.
virtual charT do_widen(char c) const;
Returns the appropriate charT representation for c.
virtual const char* do_widen(const char* low, const char* high,charT* dest) const;
Converts each character in the range [low,high) to its charT representation. Returns high.
Example
//
// ctype.cpp
//
#include <iostream>
int main ()
{
using namespace std;
locale loc;
string s1("blues Power");
// Get a reference to the ctype<char> facet
const ctype<char>& ct =
#ifndef _RWSTD_NO_TEMPLATE_ON_RETURN_TYPE
use_facet<ctype<char> >(loc);
#else
use_facet(loc,(ctype<char>*)0);
#endif
// Check the classification of the 'a' character
cout << ct.is(ctype_base::alpha,'a') << endl;
cout << ct.is(ctype_base::punct,'a') << endl;
// Scan for the first upper case character
cout << (char)*(ct.scan_is(ctype_base::upper,
s1.begin(),s1.end())) << endl;
// Convert characters to upper case
ct.toupper(s1.begin(),s1.end());
cout << s1 << endl;
return 0;
}
See Also
locale, facets, collate, ctype<char>, ctype_byname



©Copyright 1996, Rogue Wave Software, Inc.
ctype_base
ctype...