22.2 <ctype.h> – Zeichenklassifizierung und Umwandlung
 
In der Headerdatei <ctype.h> befinden sich Funktionen, mit denen einzelne Zeichen überprüft oder umgewandelt werden können. In der folgenden Tabelle finden Sie die Syntax der einzelnen Funktionen und die Beschreibungen:
Tabelle 22.1
Funktionen zur Zeichenklassifizierung und Zeichenumwandlung
Prototyp
|
Beschreibung
|
int isalnum(int c);
|
Testet, ob ein Zeichen ein alphanumerisches Zeichen ist
|
int isalpha(int c);
|
Testet, ob ein Zeichen ein Buchstabe ist
|
int iscntrl(int c);
|
Testet, ob ein Zeichen ein Steuerzeichen ist (z.B. Ctrl + B)
|
int isdigit(int c);
|
Testet, ob ein Zeichen eine Dezimalziffer ist
|
int isgraph(int c);
|
Testet, ob ein Zeichen ein druckbares Zeichen ist
|
int islower(int c);
|
Testet, ob ein Zeichen ein Kleinbuchstabe ist
|
int isprint(int c);
|
Testet, ob ein Zeichen ein druckbares Zeichen ist, aber kein Leerzeichen
|
int ispunct(int c);
|
Testet, ob ein Zeichen ein Interpunktionszeichen ist
|
int isspace(int c);
|
Testet, ob ein Zeichen ein Leerzeichen (Zwischenraumzeichen) ist
|
int isupper(int c);
|
Testet, ob ein Zeichen ein Großbuchstabe ist
|
int isxdigit(int c);
|
Testet, ob ein Zeichen eine hexadezimale Ziffer ist
|
int isascii(int c);
|
Das Makro isascii prüft, ob das Zeichen c ein normiertes Zeichen des ASCI-Zeichensatzes ist (0–127). Wenn nicht, kann es mit toascii umgewandelt werden.
|
int isblank(int c);
|
Ist c ein Leerzeichen, wird 1 zurückgegeben, sonst 0 (nur bei ANSI C99-Compilern vorhanden).
|
int tolower(int c);
|
Wandelt Groß- in Kleinbuchstaben um
|
int toupper(int c);
|
Wandelt Klein- in Großbuchstaben um
|
int toascii(int c);
|
toascii ist ein Makro, das den übergebenen Wert c (durch Löschen aller Bits, außer den 7 niederwertigsten) auf den Bereich 0 bis 127 begrenzt und das Ergebnis dieser Operation zurückliefert. Dadurch werden aber nationale Zeichen wie etwa 'ä', 'ü', 'ö' ... falsch dargestellt.
|
Alle Funktionen in der Tabelle erwarten ein int-Argument, dessen Wert als EOF oder unsigned char darstellbar sein muss. Bei Erfolg geben diese Funktionen einen Wert ungleich 0 zurück. Tritt ein Fehler auf, ist der Rückgabewert immer 0. Zur Demonstration der einzelnen Funktionen das folgende Listing:
/* big_small.c */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
/* Prototypen */
void grosschrift(char *, char *);
void kleinschrift(char *, char *);
void international(char *,char *);
void oeffne_dateien(char *, char *, FILE **, FILE **);
void grosschrift(char *arg2, char *arg3) {
FILE *in,*out;
int c;
oeffne_dateien(arg2,arg3,&in,&out);
while((c=getc(in)) != EOF) {
if(islower(c))
putc(toupper(c),out);
else
putc(c,out);
}
}
void kleinschrift(char *arg2, char *arg3) {
FILE *in,*out;
int c;
oeffne_dateien(arg2,arg3,&in,&out);
while((c=getc(in)) != EOF) {
if(isupper(c))
putc(tolower(c),out);
else
putc(c,out);
}
}
void international(char *arg2, char *arg3) {
FILE *in,*out;
int c;
oeffne_dateien(arg2,arg3,&in,&out);
while((c=getc(in)) != EOF) {
if(isascii(c)==0)
putc(toascii(c),out);
else
putc(c,out);
}
}
void oeffne_dateien(char *quelle, char *ziel,
FILE **input, FILE **output) {
if((*input=fopen(quelle,"r+")) == NULL) {
printf("Fehler beim Öffnen (lesen) von %s\n", quelle);
exit(EXIT_FAILURE);
}
if((*output=fopen(ziel,"w+")) == NULL) {
printf("Fehler beim Öffnen (schreiben) von %s\n", ziel);
exit(EXIT_FAILURE);
}
}
int main(int argc, char **argv) {
if(argc<4) {
printf("Verwendung: "
"Programmname -[Schalter] datei.txt Zieldatei.txt\n"
"für -[Schalter] : -b (kompl. Textdatei in Grossschrift)\n"
" -s (kompl. Textdatei in Kleinschrift)\n"
" -i (nat. Zeichen zu ASCII-Zeichen\n");
return EXIT_FAILURE;
}
if(strcmp(argv[1],"-b")==0)
grosschrift(argv[2],argv[3]);
else if(strcmp(argv[1],"-s")==0)
kleinschrift(argv[2],argv[3]);
else if(strcmp(argv[1],"-i")==0)
international(argv[2],argv[3]);
else {
printf("Verwendung: "
"Programmname -[Schalter] datei.txtZieldatei.txt\n"
"für -[Schalter] : -b (kompl. Textdatei in Grossschrift)\n"
" -s (kompl. Textdatei in Kleinschrift)\n"
" -i (nat. Zeichen zu ASCII-Zeichen\n");
return EXIT_SUCCESS;
}
return EXIT_SUCCESS;
}
Mit diesem Beispiel kann bei einer Textdatei jeder Buchstabe in einen großen, einen kleinen oder ein ASCII-Zeichen umgewandelt werden.
|