9.2. Funktionen zur Bearbeitung einzelner Zeichen
Der ANSI-Standard definiert eine Reihe von Funktionen zur Bearbeitung einzelner Zeichen. Diese betreffen nicht unmittelbar den Bereich "Zeichenketten" — in der Praxis werden sie jedoch hauptsächlich auf die Elemente von Zeichenketten angewendet. Die Prototypen dieser Funktionen sind in ctype.h definiert, d.h., bei Gebrauch einer dieser Funktionen ist die Anweisung
#include <ctype.h>
einzufügen. Allen Funktionen ist gemeinsam, daß sie als Argument einen int-Wert erwarten und einen ebensolchen zurückgeben. Allerdings benutzen sie allesamt nur das niedrigerwertige Byte des Arguments, so daß ein Aufruf mit char-Werten keine Probleme bereitet. Die folgende Tabelle liefert eine Übersicht über alle ANSI-konformen Funktionen zur Zeichenbearbeitung inklusive Kurzbeschreibung.
Funktion | Liefert den Wert ... |
---|---|
int isdigit(int iZeichen) | "wahr", wenn iZeichen, eine dezimale Ziffer ist. |
int isalpha(int iZeichen) | "wahr", wenn isupper(iZeichen) oder islower(iZeichen) "wahr" ist. |
int isalnum(int iZeichen) |
"wahr
" , wenn isalpha(iZeichen) oder isdigit(iZeichen) "wahr" ist. |
isxdigit(int iZeichen) | "wahr", wenn iZeichen eine hexadezimale Ziffer ist. |
int islower(int iZeichen) | "wahr", wenn iZeichen ein Kleinbuchstabe ist (kein Umlaut oder 'ß'). |
int isupper(int iZeichen) | "wahr", wenn iZeichen ein Großbuchstabe ist (kein Umlaut). |
int tolower(int iZeichen) | von iZeichen als Kleinbuchstabe, wenn iZeichen ein Großbuchstabe ist, sonst bleibt iZeichen unverändert (funktioniert nicht für Umlaute). |
int toupper(int iZeichen) | von iZeichen als Großbuchstabe, wenn iZeichen ein Kleinbuchstabe ist, sonst wird iZeichen nicht verändert (funktioniert nicht für Umlaute). |
int isspace(int iZeichen) | "wahr", wenn iZeichen eines der folgenden "Whitespace"-Zeichen ist: ' ', '\t', '\f', '\n', '\v', '\r'. |
int iscntrl(int iZeichen) | "wahr", wenn iZeichen ein Steuerzeichen ist, also i.a. einen ASCII-Wert zwischen 0 und 32 oder 127 hat. |
int ispunct(int iZeichen) | "wahr", wenn iZeichen ein Interpunktionszeichen ist, d.h., wenn iZeichen ein druckbares Zeichen, aber kein Buchstabe, keine Ziffer und kein Leerzeichen ist (siehe nachfolgendes Beispiel). |
int isprint(int iZeichen) | "wahr", wenn iZeichen ein druckbares Zeichen oder ein Leerzeichen ist. |
int isgraph(int iZeichen) |
"wahr
" , wenn iZeichen ein druckbares Zeichen, aber kein Leerzeichen ist. |
Folgendes Beispiel ermittelt alle Zeichen, die ispunct() als Interpunktions-Zeichen interpretiert:
#include <stdio.h>
#include <ctype.h> /* für ispunct() */
int main(void){
int iCount=0;
while(iCount++ <= 255){
if(ispunct(iCount))
putchar(iCount);
}
return 0;
}
Während alle is...-Funktionen überprüfen, ob ein bestimmtes Zeichen einer bestimmten Kategorie angehört, handelt es sich bei tolower() und toupper() um Umwandlungs-Funktionen. Liegt beim Argument von tolower() ein Großbuchstabe vor, dann gibt sie den Wert des entsprechenden Kleinbuchstabens zurück. Bei toupper() verhält es sich gerade umgekehrt. Alle Funktionen, die ein Zeichen als Buchstaben identifizieren, beschränken sich auf das englische Alphabet und interpretieren daher Umlaute und 'ß' nicht als Buchstaben.
Der Einsatz von tolower() und toupper() ist sehr praktisch, wenn z.B. Benutzereingaben sowohl in Klein- als auch Großbuchstaben möglich sind: Bei der Überprüfung der Eingabe können sie dann herangezogen werden, um die Anzahl der Vergleiche zu reduzieren (siehe dazu yesno.c in Abschnitt 7.3).