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. 
 |