Click on the banner to return to the class reference home page.

ctype


ctype_base ctype... locale::facet

Summary

A facet that provides character classification facilities.

Data Type and Member Function Indexes
(exclusive of constructors and destructors)

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:

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

Constructor and Destructor

explicit ctype(size_t refs = 0)
~ctype();  // virtual and protected

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;
char
narrow(charT c, char dfault) const;
const charT* 
narrow(const charT* low, const charT*, char dfault,
       char* to) const;
const charT* 
scan_is(mask m, const charT*, const charT* high) const;
const charT* 
scan_not(mask m, const charT* low, const charT* high) const;
charT        
tolower(charT c) const;
const charT* 
tolower(charT* low, const charT* high) const;
charT        
toupper(charT) const;
const charT* 
toupper(charT* low, const charT* high) const;
charT        
widen(char c) const;
const char*  
widen(const char* low, const char* high, charT* to) const;

Facet ID

static locale::id id;

Protected Member Functions

virtual bool         
do_is(mask m, charT c) const;
virtual const charT* 
do_is(const charT* low, const charT* high,
      mask* vec) const;
virtual char
do_narrow(charT, char dfault) const;
virtual const charT* 
do_narrow(const charT* low, const charT* high,
          char dfault, char* dest) const;
virtual const charT* 
do_scan_is(mask m, const charT* low, const charT* high) const;
virtual const charT* 
do_scan_not(mask m, const charT* low, const charT* high) const;
virtual charT        
do_tolower(charT) const;
virtual const charT* 
do_tolower(charT* low, const charT* high) const;
virtual charT       
do_toupper(charT c) const;
virtual const charT* 
do_toupper(charT* low, const charT* high) const;
virtual charT        
do_widen(char c) const;
virtual const char*  
do_widen(const char* low, const char* high,charT* dest) const;

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.