ctype.h

In der Programmierung mit C oder C++ wird häufig mit Character-Strings gearbeitet, welche eine Aneinanderreihung von einzelnen Zeichen darstellen. Die einzelnen Zeichen werden üblicherweise mit dem Typ char gehandhabt und als ASCII-Zeichen interpretiert. Die Standardbibliothek ctype hilft, mit diesen Zeichen zu arbeiten, wobei zu beachten ist, dass mit dieser Bibliothek ausdrücklich NUR einzelne 7-Bit-ASCII-Zeichen unterstützt werden.

C
C++
#include <ctype.h>
#include <cctype>

Identifizieren von ASCII-Typen

Die folgenden Funktionen geben entweder 0 oder 1 zurück, je nachdem, ob das übergebene ASCII-Zeichen den Kriterien entspricht.

int islower (int asc);	   lowercase letters
int isupper (int asc);	   capital letter
int isalpha (int asc);	   Letters
int isdigit (int asc);	   digits
int isxdigit(int asc);	   Hexadecimal digits
int isalnum (int asc);	   letters and digits
int ispunct (int asc);	   punctuation marks
int isgraph (int asc);	   Graphic signs
int isblank (int asc);	   tab and space
int isspace (int asc);	   whitespaces
int isprint (int asc);	   Printable characters
int iscntrl (int asc);	   control characters
int isascii (int asc);	   ASCII characters

Zur Veranschaulichung, welche Werte bei welcher Funktion zurückgegeben werden, hier nachfolgend eine Auflistung in tabellarischer Form. Horizontal sind die verschiedenen ASCII-Zeichen aufgetragen, geordnet nach der Codierung.

          0x00        0x0a  0x0e       ! 0 : A G [ a g {
            -    tab    -     -  space - - - - - - - - -  0x7f 
          0x08        0x0d  0x1f       / 9 @ F Z ` f z ~
---------------------------------------------------------------
islower     0     0     0     0    0   0 0 0 0 0 0 1 1 0    0
isupper     0     0     0     0    0   0 0 0 1 1 0 0 0 0    0
isalpha     0     0     0     0    0   0 0 0 1 1 0 1 1 0    0
isdigit     0     0     0     0    0   0 1 0 0 0 0 0 0 0    0
isxdigit    0     0     0     0    0   0 1 0 1 0 0 1 0 0    0
isalnum     0     0     0     0    0   0 1 0 1 1 0 1 1 0    0
ispunct     0     0     0     0    0   1 0 1 0 0 1 0 0 1    0
isgraph     0     0     0     0    0   1 1 1 1 1 1 1 1 1    0
isblank     0     1     0     0    1   0 0 0 0 0 0 0 0 0    0
isspace     0     1     1     0    1   0 0 0 0 0 0 0 0 0    0
isprint     0     0     0     0    1   1 1 1 1 1 1 1 1 1    0
iscntrl     1     1     1     1    0   0 0 0 0 0 0 0 0 0    1
isascii     1     1     1     1    1   1 1 1 1 1 1 1 1 1    1

Es ist zu beachten, dass der ASCII-Zeichensatz nur für Werte von 0 - 127 definiert ist. Somit wird jegliche Zahl, die nicht in diesem Bereich liegt, nicht als ASCII-Zeichen angesehen, und sämtliche Funktionen geben in diesem Falle 0 zurück.

Im Bibliotheks-Header finden sich ausserdem folgende Funktionen, allerdings scheinen diese Funktionen (aus Sicht des Autors) ihre ursprüngliche Bedeutung verloren zu haben und sind heute nicht weiter nützlich:

int isnumber (int asc);      Same as isdigit
int ishexnumber(int asc);    Same as isxdigit
int isrune (int asc);        Same as isascii
int isideogram (int asc);    always 0
int isphonogram(int asc);    always 0
int isspecial (int asc);     always 0

Umwandlung von Zeichen

Nebst Identifikations-Funktionen gibt es in der ASCII-Bibliothek auch noch Funktionen, die Zeichen umwandeln:

int tolower (int asc);      Conversion to lowercase
int toupper (int asc);      Conversion to uppercase
int toascii (int asc);      Conversion to ASCII characters
int digittoint(int asc);    Converting a hexadecimal digit to a int.

Die Funktionen tolower und toupper wandeln dabei explizit nur Buchstaben um. Alle anderen Zeichen werden ohne Änderung zurückgegeben. Die Funktion toascii löscht schlicht sämtliche Bits, die nicht zu den untersten 7 Bits des ASCII-Standards gehören. Die Funktion digittoint wandelt eine einzelne hexadezimale Ziffer in ihre numerische Representation um.