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

  1. ^ ISO/IEC 9899: 1999 Spezifikation (PDF). p. 193, § 7.4.

Externe Links