C Charakterklassifizierung
C Charakterklassifizierung ist eine Operation von einer Gruppe von Funktionen in der ANSI C Standardbibliothek für die C Programmiersprache. Diese Funktionen werden verwendet, um Zeichen für die Mitgliedschaft in einer bestimmten Klasse von Zeichen zu testen, wie z. B. alphabetische Zeichen, Kontrollzeichen usw. Sowohl Single-Byte als auch breite Zeichen werden unterstützt.[1]
Geschichte
Frühe C-Sprache-Programmierer, die an der Arbeit arbeiten Unix Betriebssystem entwickelt Programmierende Redewendungen zum Klassifizieren von Zeichen in verschiedene Typen. Zum Beispiel für die ASCII Zeichensatz, der folgende Ausdruck identifiziert einen Buchstaben, wenn sein Wert ist Stimmt:
('EIN' <= c && c <= 'Z') || ('a' <= c && c <= 'z')
Da dies in mehreren Formulierungen ausgedrückt werden kann, wurde es wünschenswert, kurze, standardisierte Formen solcher Tests einzuführen, die in der systemweiten Header-Datei platziert wurden ctype.h.
Implementierung
Im Gegensatz zum obigen Beispiel werden die Charakterklassifizierungsroutinen nicht als Vergleichstests geschrieben. In den meisten C -Bibliotheken werden sie als statische Tabellen -Lookups anstelle von Makros oder Funktionen geschrieben.
Beispielsweise wird eine Reihe von 256 Acht-Bit-Ganzzahlen, die als Bitfields angeordnet sind, erstellt, wobei jedes Bit einer bestimmten Eigenschaft des Zeichens entspricht, z. B. Isdigit, Isalpha. Wenn das Bit der Ganzzahlen niedrigsten der IsDigit-Eigenschaft entspricht, kann der Code als geschrieben werden
#define isDigit (x) (Tabelle [x] & 1)
Frühe Versionen von Linux verwendete eine potenziell fehlerhafte Methode, die dem ersten Code -Beispiel ähnelt:
#Define isDigit (x) ((x)> = '0' && (x) <= '9')
Dies kann bei der Variablen Probleme verursachen x hat ein Nebeneffekt. Zum Beispiel, wenn man anruft isDigit (x ++) oder isDigit (run_some_program ()). Es ist nicht sofort offensichtlich, dass das Argument zu Isdigit wird zweimal bewertet. Aus diesem Grund wird der tabellbasierte Ansatz im Allgemeinen verwendet.
Überblick über Funktionen
Die Funktionen, die auf Single-Byte-Zeichen arbeiten ctype.h Header-Datei (cctype in C ++). Die Funktionen, die auf breiten Zeichen arbeiten WCTTYPE.H Header-Datei (cwctype in C ++).
Die Klassifizierung wird nach dem effektiven Gebietsschema bewertet.
Byte Charakter | Breit Charakter | Beschreibung |
---|---|---|
ISALNUM | Iswalnum | Überprüft, ob der Operand alphanumerisch ist |
ISALPHA | Iswalpha | Überprüft, ob der Operand alphabetisch ist |
ist tiefer | Iswlower | Überprüft, ob der Operand Kleinbuchstaben ist |
Isupper | Iswupper | Überprüft, ob der Operand ein Großbuchstaben ist |
Isdigit | Iswdigit | Überprüft, ob der Operand eine Ziffer ist |
isxDigit | iswxDigit | Überprüft, ob der Operand hexadezimal ist |
iscntrl | iswcntrl | Überprüft, ob der Operand ein Steuercharakter ist |
IsGraph | iswgraph | Überprüft, ob der Operand ein grafisches Zeichen ist |
ISSPACE | iswspace | Überprüft, ob der Operand ist Platz |
ist leer | iswblank | Überprüft, ob der Operand ein leerer Speicherzeichen ist |
isPrint | Iswprint | Überprüft, ob der Operand ein druckbares Zeichen ist |
ISPUNKT | iswpunct | Überprüft, ob der Operand Interpunktion ist |
zu senken | Schlepplöcher | Konvertiert den Operanden in Kleinbuchstaben |
Toupper | Türwerk | konvertiert den Operanden in Großbuchstaben |
- | iswCtype | Überprüft, ob der Operand in eine bestimmte Klasse fällt |
- | Schlepptau | Konvertiert den Operanden mithilfe einer bestimmten Zuordnung |
- | WCType | Gibt eine breite Charakterklasse zurück, mit der verwendet werden soll iswCtype |
- | WCtrans | Gibt eine Transformationskartierung zurück, mit der Sie verwendet werden sollen Schlepptau |
Verweise
- ^ ISO/IEC 9899: 1999 Spezifikation (PDF). p. 193, § 7.4.