Arduino - Charakterfunktionen

Alle Daten werden als Zeichen in Computer eingegeben, einschließlich Buchstaben, Ziffern und verschiedenen speziellen Symbolen. In diesem Abschnitt werden die Funktionen von C ++ zum Untersuchen und Bearbeiten einzelner Zeichen erläutert.

Die Zeichenbehandlungsbibliothek enthält mehrere Funktionen, die nützliche Tests und Manipulationen von Zeichendaten durchführen. Jede Funktion erhält ein Zeichen, das als int oder EOF als Argument dargestellt wird. Zeichen werden oft als ganze Zahlen manipuliert.

Denken Sie daran, dass EOF normalerweise den Wert –1 hat und dass einige Hardwarearchitekturen nicht zulassen, dass negative Werte in char-Variablen gespeichert werden. Daher bearbeiten die Zeichenbehandlungsfunktionen Zeichen als Ganzzahlen.

In der folgenden Tabelle sind die Funktionen der Zeichenbehandlungsbibliothek zusammengefasst. Wenn Sie Funktionen aus der Zeichenbehandlungsbibliothek verwenden, schließen Sie Folgendes ein:<cctype> Header.

S.No. Prototyp & Beschreibung
1

int isdigit( int c )

Gibt 1 zurück, wenn c eine Ziffer ist, andernfalls 0.

2

int isalpha( int c )

Gibt 1 zurück, wenn c ein Buchstabe ist, andernfalls 0.

3

int isalnum( int c )

Gibt 1 zurück, wenn c eine Ziffer oder ein Buchstabe ist, andernfalls 0.

4

int isxdigit( int c )

Gibt 1 zurück, wenn c ein hexadezimales Ziffernzeichen ist, andernfalls 0.

(In Anhang D, Zahlensysteme, finden Sie eine detaillierte Erläuterung der Binär-, Oktal-, Dezimal- und Hexadezimalzahlen.)

5

int islower( int c )

Gibt 1 zurück, wenn c ein Kleinbuchstabe ist, andernfalls 0.

6

int isupper( int c )

Gibt 1 zurück, wenn c ein Großbuchstabe ist. 0 sonst.

7

int isspace( int c )

Gibt 1 zurück, wenn c ein Leerzeichen ist - Zeilenumbruch ('\ n'), Leerzeichen

(''), Formularvorschub ('\ f'), Wagenrücklauf ('\ r'), horizontale Registerkarte ('\ t') oder vertikale Registerkarte ('\ v') - und sonst 0.

8

int iscntrl( int c )

Gibt 1 zurück, wenn c ein Steuerzeichen ist, z. B. Zeilenumbruch ('\ n'), Formularvorschub ('\ f'), Wagenrücklauf ('\ r'), horizontale Registerkarte ('\ t'), vertikale Registerkarte (') \ v '), alert (' \ a ') oder backspace (' \ b ') - und sonst 0.

9

int ispunct( int c )

Gibt 1 zurück, wenn c ein anderes Druckzeichen als ein Leerzeichen, eine Ziffer oder ein Buchstabe ist, andernfalls 0.

10

int isprint( int c )

Gibt 1 zurück, wenn c ein Druckzeichen mit Leerzeichen ('') ist, andernfalls 0.

11

int isgraph( int c )

Gibt 1 zurück, wenn c ein anderes Druckzeichen als Leerzeichen ('') ist, andernfalls 0.

Beispiele

Das folgende Beispiel zeigt die Verwendung der Funktionen isdigit, isalpha, isalnum und isxdigit. Funktionisdigitbestimmt, ob das Argument eine Ziffer (0–9) ist. Die Funktionisalphabestimmt, ob das Argument ein Großbuchstabe (AZ) oder ein Kleinbuchstabe (a - z) ist. Die Funktionisalnumbestimmt, ob das Argument ein Groß-, Klein- oder eine Ziffer ist. Funktionisxdigit bestimmt, ob das Argument eine hexadezimale Ziffer ist (A - F, a - f, 0–9).

Beispiel 1

void setup () {
   Serial.begin (9600);
   Serial.print ("According to isdigit:\r");
   Serial.print (isdigit( '8' ) ? "8 is a": "8 is not a");
   Serial.print (" digit\r" );
   Serial.print (isdigit( '8' ) ?"# is a": "# is not a") ;
   Serial.print (" digit\r");
   Serial.print ("\rAccording to isalpha:\r" );
   Serial.print (isalpha('A' ) ?"A is a": "A is not a");
   Serial.print (" letter\r");
   Serial.print (isalpha('A' ) ?"b is a": "b is not a");
   Serial.print (" letter\r");
   Serial.print (isalpha('A') ?"& is a": "& is not a");
   Serial.print (" letter\r");
   Serial.print (isalpha( 'A' ) ?"4 is a":"4 is not a");
   Serial.print (" letter\r");
   Serial.print ("\rAccording to isalnum:\r");
   Serial.print (isalnum( 'A' ) ?"A is a" : "A is not a" );

   Serial.print (" digit or a letter\r" );
   Serial.print (isalnum( '8' ) ?"8 is a" : "8 is not a" ) ;
   Serial.print (" digit or a letter\r");
   Serial.print (isalnum( '#' ) ?"# is a" : "# is not a" );
   Serial.print (" digit or a letter\r");
   Serial.print ("\rAccording to isxdigit:\r");
   Serial.print (isxdigit( 'F' ) ?"F is a" : "F is not a" );
   Serial.print (" hexadecimal digit\r" );
   Serial.print (isxdigit( 'J' ) ?"J is a" : "J is not a" ) ;
   Serial.print (" hexadecimal digit\r" );
   Serial.print (isxdigit( '7' ) ?"7 is a" : "7 is not a" ) ;

   Serial.print (" hexadecimal digit\r" );
   Serial.print (isxdigit( '$' ) ? "$ is a" : "$ is not a" );
   Serial.print (" hexadecimal digit\r" );
   Serial.print (isxdigit( 'f' ) ? “f is a" : "f is not a");
   
}

void loop () {

}

Ergebnis

According to isdigit:
8 is a digit
# is not a digit
According to isalpha:
A is a letter
b is a letter
& is not a letter
4 is not a letter
According to isalnum:
A is a digit or a letter

8 is a digit or a letter
# is not a digit or a letter
According to isxdigit:
F is a hexadecimal digit
J is not a hexadecimal digit
7 is a hexadecimal digit

$ is not a hexadecimal digit
f is a hexadecimal digit

Wir verwenden den bedingten Operator (?:)Mit jeder Funktion sollte in der Ausgabe für jedes getestete Zeichen gedruckt werden, ob die Zeichenfolge "a" oder die Zeichenfolge "nicht a" ist. Zum Beispiel Liniea gibt an, dass wenn '8' eine Ziffer ist, dh wenn isdigitgibt einen wahren Wert (ungleich Null) zurück - die Zeichenfolge "8 ist a" wird gedruckt. Wenn '8' keine Ziffer ist (dh wennisdigit gibt 0) zurück, die Zeichenfolge "8 ist kein a" wird gedruckt.

Beispiel 2

Das folgende Beispiel zeigt die Verwendung der Funktionen islower und isupper. Die Funktionislowerbestimmt, ob das Argument ein Kleinbuchstabe (a - z) ist. Funktionisupper bestimmt, ob das Argument ein Großbuchstabe (A - Z) ist.

int thisChar = 0xA0;

void setup () {
   Serial.begin (9600);
   Serial.print ("According to islower:\r") ;
   Serial.print (islower( 'p' ) ? "p is a" : "p is not a" );
   Serial.print ( " lowercase letter\r" );
   Serial.print ( islower( 'P') ? "P is a" : "P is not a") ;
   Serial.print ("lowercase letter\r");
   Serial.print (islower( '5' ) ? "5 is a" : "5 is not a" );
   Serial.print ( " lowercase letter\r" );
   Serial.print ( islower( '!' )? "! is a" : "! is not a") ;
   Serial.print ("lowercase letter\r");

   Serial.print ("\rAccording to isupper:\r") ;
   Serial.print (isupper ( 'D' ) ? "D is a" : "D is not an" );
   Serial.print ( " uppercase letter\r" );
   Serial.print ( isupper ( 'd' )? "d is a" : "d is not an") ;
   Serial.print ( " uppercase letter\r" );
   Serial.print (isupper ( '8' ) ? "8 is a" : "8 is not an" );
   Serial.print ( " uppercase letter\r" );
   Serial.print ( islower( '$' )? "$ is a" : "$ is not an") ;
   Serial.print ("uppercase letter\r ");
}

void setup () {

}

Ergebnis

According to islower:
p is a lowercase letter
P is not a lowercase letter
5 is not a lowercase letter
! is not a lowercase letter

According to isupper:
D is an uppercase letter
d is not an uppercase letter
8 is not an uppercase letter
$ is not an uppercase letter

Beispiel 3

Das folgende Beispiel zeigt die Verwendung von Funktionen isspace, iscntrl, ispunct, isprint und isgraph.

  • Die Funktion isspace bestimmt, ob das Argument ein Leerzeichen ist, z. B. Leerzeichen (''), Formularvorschub ('\ f'), Zeilenumbruch ('\ n'), Wagenrücklauf ('\ r'), horizontale Registerkarte ('\ t ') oder vertikale Lasche (' \ v ').

  • Die Funktion iscntrl Legt fest, ob das Argument ein Steuerzeichen ist, z. B. horizontale Registerkarte ('\ t'), vertikale Registerkarte ('\ v'), Formular-Feed ('\ f'), Warnung ('\ a'), Rücktaste ('\ b '), Wagenrücklauf (' \ r ') oder Zeilenumbruch (' \ n ').

  • Die Funktion ispunct bestimmt, ob das Argument ein anderes Druckzeichen als ein Leerzeichen, eine Ziffer oder ein Buchstabe ist, z. B. $, #, (,), [,], {,},;,: oder%.

  • Die Funktion isprint bestimmt, ob sein Argument ein Zeichen ist, das auf dem Bildschirm angezeigt werden kann (einschließlich des Leerzeichens).

  • Die Funktion isgraph testet auf die gleichen Zeichen wie isprint, aber das Leerzeichen ist nicht enthalten.

void setup () {
   Serial.begin (9600);
   Serial.print ( " According to isspace:\rNewline ") ;
   Serial.print (isspace( '\n' )? " is a" : " is not a" );
   Serial.print ( " whitespace character\rHorizontal tab") ;
   Serial.print (isspace( '\t' )? " is a" : " is not a" );
   Serial.print ( " whitespace character\n") ;
   Serial.print (isspace('%')? " % is a" : " % is not a" );
   
   Serial.print ( " \rAccording to iscntrl:\rNewline") ;
   Serial.print ( iscntrl( '\n' )?"is a" : " is not a" ) ;
   Serial.print (" control character\r");
   Serial.print (iscntrl( '$' ) ? " $ is a" : " $ is not a" );
   Serial.print (" control character\r");
   Serial.print ("\rAccording to ispunct:\r");
   Serial.print (ispunct(';' ) ?"; is a" : "; is not a" ) ;
   Serial.print (" punctuation character\r");
   Serial.print (ispunct('Y' ) ?"Y is a" : "Y is not a" ) ;
   Serial.print ("punctuation character\r");
   Serial.print (ispunct('#' ) ?"# is a" : "# is not a" ) ;
   Serial.print ("punctuation character\r");

   Serial.print ( "\r According to isprint:\r");
   Serial.print (isprint('$' ) ?"$ is a" : "$ is not a" );
   Serial.print (" printing character\rAlert ");
   Serial.print (isprint('\a' ) ?" is a" : " is not a" );
   Serial.print (" printing character\rSpace ");
   Serial.print (isprint(' ' ) ?" is a" : " is not a" );
   Serial.print (" printing character\r");
   
   Serial.print ("\r According to isgraph:\r");
   Serial.print (isgraph ('Q' ) ?"Q is a" : "Q is not a" );
   Serial.print ("printing character other than a space\rSpace ");
   Serial.print (isgraph (' ') ?" is a" : " is not a" );
   Serial.print ("printing character other than a space ");
}

void loop () {

}

Ergebnis

According to isspace:
Newline is a whitespace character
Horizontal tab is a whitespace character
% is not a whitespace character
According to iscntrl:
Newline is a control character
$ is not a control character
According to ispunct:
; is a punctuation character
Y is not a punctuation character
# is a punctuation character
According to isprint:
$ is a printing character
Alert is not a printing character
Space is a printing character
According to isgraph:
Q is a printing character other than a space
Space is not a printing character other than a space