Arduino - funções de caracteres

Todos os dados são inseridos em computadores como caracteres, o que inclui letras, dígitos e vários símbolos especiais. Nesta seção, discutimos os recursos do C ++ para examinar e manipular caracteres individuais.

A biblioteca de manipulação de caracteres inclui várias funções que realizam testes úteis e manipulações de dados de caracteres. Cada função recebe um caractere, representado como um int, ou EOF como um argumento. Os caracteres são freqüentemente manipulados como inteiros.

Lembre-se de que EOF normalmente tem o valor –1 e que algumas arquiteturas de hardware não permitem que valores negativos sejam armazenados em variáveis ​​char. Portanto, as funções de tratamento de caracteres manipulam os caracteres como inteiros.

A tabela a seguir resume as funções da biblioteca de tratamento de caracteres. Ao usar funções da biblioteca de manipulação de caracteres, inclua o<cctype> cabeçalho.

S.No. Protótipo e Descrição
1

int isdigit( int c )

Retorna 1 se c for um dígito e 0 caso contrário.

2

int isalpha( int c )

Retorna 1 se c for uma letra e 0 caso contrário.

3

int isalnum( int c )

Retorna 1 se c for um dígito ou letra e 0 caso contrário.

4

int isxdigit( int c )

Retorna 1 se c for um caractere de dígito hexadecimal e 0 caso contrário.

(Consulte o Apêndice D, Sistemas Numéricos, para uma explicação detalhada dos números binários, octais, decimais e hexadecimais.)

5

int islower( int c )

Retorna 1 se c for uma letra minúscula e 0 caso contrário.

6

int isupper( int c )

Retorna 1 se c for uma letra maiúscula; 0 caso contrário.

7

int isspace( int c )

Retorna 1 se c for um caractere de espaço em branco - nova linha ('\ n'), espaço

(''), avanço de formulário ('\ f'), retorno de carro ('\ r'), guia horizontal ('\ t') ou guia vertical ('\ v') - e 0 caso contrário.

8

int iscntrl( int c )

Retorna 1 se c for um caractere de controle, como nova linha ('\ n'), avanço de formulário ('\ f'), retorno de carro ('\ r'), guia horizontal ('\ t'), guia vertical (' \ v '), alert (' \ a ') ou backspace (' \ b ') - e 0 caso contrário.

9

int ispunct( int c )

Retorna 1 se c for um caractere de impressão diferente de um espaço, um dígito ou uma letra e 0 caso contrário.

10

int isprint( int c )

Retorna 1 se c for um caractere de impressão incluindo espaço ('') e 0 caso contrário.

11

int isgraph( int c )

Retorna 1 se c for um caractere de impressão diferente de espaço ('') e 0 caso contrário.

Exemplos

O exemplo a seguir demonstra o uso das funções isdigit, isalpha, isalnum e isxdigit. Funçãoisdigitdetermina se seu argumento é um dígito (0–9). A funçãoisalphadetermina se seu argumento é uma letra maiúscula (AZ) ou uma letra minúscula (a – z). A funçãoisalnumdetermina se seu argumento é uma letra maiúscula, uma letra minúscula ou um dígito. Funçãoisxdigit determina se seu argumento é um dígito hexadecimal (A – F, a – f, 0–9).

Exemplo 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 o operador condicional (?:)com cada função para determinar se a string "é um" ou a string "não é um" deve ser impressa na saída para cada caractere testado. Por exemplo, linhaa indica que se '8' é um dígito - ou seja, se isdigitretorna um valor verdadeiro (diferente de zero) - a string "8 é um" é impressa. Se '8' não for um dígito (ou seja, seisdigit retorna 0), a string "8 não é um" é impressa.

Exemplo 2

O exemplo a seguir demonstra o uso das funções islower e isupper. A funçãoislowerdetermina se seu argumento é uma letra minúscula (a – z). Funçãoisupper determina se seu argumento é uma letra maiú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

Exemplo 3

O exemplo a seguir demonstra o uso de funções isspace, iscntrl, ispunct, isprint e isgraph.

  • A função isspace determina se seu argumento é um caractere de espaço em branco, como espaço (''), alimentação de formulário ('\ f'), nova linha ('\ n'), retorno de carro ('\ r'), tabulação horizontal ('\ t ') ou guia vertical (' \ v ').

  • A função iscntrl determina se seu argumento é um caractere de controle, como tabulação horizontal ('\ t'), tabulação vertical ('\ v'), alimentação de formulário ('\ f'), alerta ('\ a'), backspace ('\ b '), retorno de carro (' \ r ') ou nova linha (' \ n ').

  • A função ispunct determina se seu argumento é um caractere de impressão diferente de um espaço, dígito ou letra, como $, #, (,), [,], {,},;,: ou%.

  • A função isprint determina se seu argumento é um caractere que pode ser exibido na tela (incluindo o caractere de espaço).

  • A função isgraph testa os mesmos caracteres que isprint, mas o caractere de espaço não é incluído.

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