Arduino - Funciones de caracteres

Todos los datos se ingresan en las computadoras como caracteres, que incluyen letras, dígitos y varios símbolos especiales. En esta sección, discutimos las capacidades de C ++ para examinar y manipular caracteres individuales.

La biblioteca de manejo de caracteres incluye varias funciones que realizan pruebas útiles y manipulaciones de datos de caracteres. Cada función recibe un carácter, representado como int, o EOF como argumento. Los caracteres a menudo se manipulan como números enteros.

Recuerde que EOF normalmente tiene el valor –1 y que algunas arquitecturas de hardware no permiten almacenar valores negativos en variables char. Por lo tanto, las funciones de manejo de caracteres manipulan caracteres como números enteros.

La siguiente tabla resume las funciones de la biblioteca de manejo de caracteres. Cuando utilice funciones de la biblioteca de manejo de caracteres, incluya el<cctype> encabezamiento.

S.No. Prototipo y descripción
1

int isdigit( int c )

Devuelve 1 si c es un dígito y 0 en caso contrario.

2

int isalpha( int c )

Devuelve 1 si c es una letra y 0 en caso contrario.

3

int isalnum( int c )

Devuelve 1 si c es un dígito o una letra y 0 en caso contrario.

4

int isxdigit( int c )

Devuelve 1 si c es un carácter de dígito hexadecimal y 0 en caso contrario.

(Consulte el Apéndice D, Sistemas numéricos, para obtener una explicación detallada de los números binarios, octales, decimales y hexadecimales).

5

int islower( int c )

Devuelve 1 si c es una letra minúscula y 0 en caso contrario.

6

int isupper( int c )

Devuelve 1 si c es una letra mayúscula; 0 de lo contrario.

7

int isspace( int c )

Devuelve 1 si c es un carácter de espacio en blanco: nueva línea ('\ n'), espacio

(''), avance de formulario ('\ f'), retorno de carro ('\ r'), tabulación horizontal ('\ t') o tabulación vertical ('\ v') - y 0 en caso contrario.

8

int iscntrl( int c )

Devuelve 1 si c es un carácter de control, como nueva línea ('\ n'), avance de formulario ('\ f'), retorno de carro ('\ r'), tabulación horizontal ('\ t'), tabulación vertical (' \ v '), alert (' \ a ') o retroceso (' \ b ') - y 0 en caso contrario.

9

int ispunct( int c )

Devuelve 1 si c es un carácter de impresión que no es un espacio, un dígito o una letra y 0 en caso contrario.

10

int isprint( int c )

Devuelve 1 si c es un carácter de impresión que incluye espacio ('') y 0 en caso contrario.

11

int isgraph( int c )

Devuelve 1 si c es un carácter de impresión distinto del espacio ('') y 0 en caso contrario.

Ejemplos

El siguiente ejemplo demuestra el uso de las funciones isdigit, isalpha, isalnum y isxdigit. Funciónisdigitdetermina si su argumento es un dígito (0–9). La funciónisalphadetermina si su argumento es una letra mayúscula (AZ) o una letra minúscula (a – z). La funciónisalnumdetermina si su argumento es una letra mayúscula, minúscula o un dígito. Funciónisxdigit determina si su argumento es un dígito hexadecimal (A – F, a – f, 0–9).

Ejemplo 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 () {

}

Resultado

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

Usamos el operador condicional (?:)con cada función para determinar si la cadena "es un" o la cadena "no es un" debe imprimirse en la salida para cada carácter probado. Por ejemplo, líneaa indica que si '8' es un dígito, es decir, si isdigitdevuelve un valor verdadero (distinto de cero): se imprime la cadena "8 es un". Si '8' no es un dígito (es decir, siisdigit devuelve 0), se imprime la cadena "8 no es un".

Ejemplo 2

El siguiente ejemplo demuestra el uso de las funciones islower y isupper. La funciónislowerdetermina si su argumento es una letra minúscula (a – z). Funciónisupper determina si su argumento es una letra mayúscula (A – Z).

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 () {

}

Resultado

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

Ejemplo 3

El siguiente ejemplo demuestra el uso de funciones isspace, iscntrl, ispunct, isprint y isgraph.

  • La función isspace determina si su argumento es un carácter de espacio en blanco, como espacio (''), avance de formulario ('\ f'), nueva línea ('\ n'), retorno de carro ('\ r'), tabulación horizontal ('\ t ') o tabulación vertical (' \ v ').

  • La función iscntrl determina si su argumento es un carácter de control como tabulación horizontal ('\ t'), tabulación vertical ('\ v'), avance de formulario ('\ f'), alerta ('\ a'), retroceso ('\ b '), retorno de carro (' \ r ') o nueva línea (' \ n ').

  • La función ispunct determina si su argumento es un carácter de impresión que no sea un espacio, un dígito o una letra, como $, #, (,), [,], {,},;,: o%.

  • La función isprint determina si su argumento es un carácter que se puede mostrar en la pantalla (incluido el carácter de espacio).

  • La función isgraph prueba los mismos caracteres que isprint, pero no se incluye el carácter de espacio.

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 () {

}

Resultado

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