Arduino - Функции персонажей
Все данные вводятся в компьютеры в виде символов, которые включают буквы, цифры и различные специальные символы. В этом разделе мы обсудим возможности C ++ для изучения и управления отдельными символами.
Библиотека обработки символов включает несколько функций, которые выполняют полезные тесты и манипуляции с символьными данными. Каждая функция получает в качестве аргумента символ, представленный как int, или EOF. Символы часто обрабатываются как целые числа.
Помните, что EOF обычно имеет значение –1 и что некоторые аппаратные архитектуры не позволяют хранить отрицательные значения в переменных типа char. Следовательно, функции обработки символов обрабатывают символы как целые числа.
В следующей таблице перечислены функции библиотеки обработки символов. При использовании функций из библиотеки обработки символов включите<cctype> заголовок.
S.No. | Прототип и описание |
---|---|
1 | int isdigit( int c ) Возвращает 1, если c - цифра, и 0 в противном случае. |
2 | int isalpha( int c ) Возвращает 1, если c - буква, и 0 в противном случае. |
3 | int isalnum( int c ) Возвращает 1, если c - цифра или буква, и 0 в противном случае. |
4 | int isxdigit( int c ) Возвращает 1, если c - шестнадцатеричный символ, и 0 в противном случае. (См. Приложение D, Системы счисления, где подробно описаны двоичные, восьмеричные, десятичные и шестнадцатеричные числа.) |
5 | int islower( int c ) Возвращает 1, если c - строчная буква, и 0 в противном случае. |
6 | int isupper( int c ) Возвращает 1, если c - заглавная буква; 0 в противном случае. |
7 | int isspace( int c ) Возвращает 1, если c - символ пробела - новая строка ('\ n'), пробел (''), подача формы ('\ f'), возврат каретки ('\ r'), горизонтальная табуляция ('\ t') или вертикальная табуляция ('\ v') - и 0 в противном случае. |
8 | int iscntrl( int c ) Возвращает 1, если c является управляющим символом, таким как новая строка ('\ n'), перевод страницы ('\ f'), возврат каретки ('\ r'), горизонтальная табуляция ('\ t'), вертикальная табуляция (' \ v '), alert (' \ a ') или backspace (' \ b ') - и 0 в противном случае. |
9 | int ispunct( int c ) Возвращает 1, если c - печатный символ, отличный от пробела, цифры или буквы, и 0 в противном случае. |
10 | int isprint( int c ) Возвращает 1, если c - печатный символ, включая пробел (''), и 0 в противном случае. |
11 | int isgraph( int c ) Возвращает 1, если c - печатный символ, отличный от пробела (''), и 0 в противном случае. |
Примеры
В следующем примере демонстрируется использование функций isdigit, isalpha, isalnum а также isxdigit. Функцияisdigitопределяет, является ли его аргумент цифрой (0–9). Функцияisalphaопределяет, является ли его аргумент прописной буквой (AZ) или строчной буквой (a – z). Функцияisalnumопределяет, является ли его аргумент прописной, строчной буквой или цифрой. Функцияisxdigit определяет, является ли его аргумент шестнадцатеричной цифрой (A – F, a – f, 0–9).
Пример 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 () {
}
Результат
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
Используем условный оператор (?:)с каждой функцией, чтобы определить, должна ли строка «является» или строка «не является» выводиться для каждого проверенного символа. Например, строкаa указывает, что если «8» - это цифра, т. isdigitвозвращает истинное (ненулевое) значение - печатается строка «8 is a». Если «8» не цифра (т. Е. Еслиisdigit возвращает 0), выводится строка «8 is not a».
Пример 2
В следующем примере демонстрируется использование функций islower а также isupper. Функцияislowerопределяет, является ли его аргумент строчной буквой (a – z). Функцияisupper определяет, является ли его аргумент прописной буквой (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 () {
}
Результат
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
Пример 3
В следующем примере демонстрируется использование функций isspace, iscntrl, ispunct, isprint а также isgraph.
Функция isspace определяет, является ли его аргумент символом пробела, например пробелом (''), переводом формы ('\ f'), новой строкой ('\ n'), возвратом каретки ('\ r'), горизонтальной табуляцией ('\ t ') или вертикальную табуляцию (' \ v ').
Функция iscntrl определяет, является ли его аргумент управляющим символом, таким как горизонтальная табуляция ('\ t'), вертикальная табуляция ('\ v'), подача формы ('\ f'), предупреждение ('\ a'), backspace ('\ b '), возврата каретки (' \ r ') или новой строки (' \ n ').
Функция ispunct определяет, является ли его аргумент печатным символом, отличным от пробела, цифры или буквы, например $, #, (,), [,], {,},;,: или%.
Функция isprint определяет, является ли его аргумент символом, который может отображаться на экране (включая пробел).
Функция isgraph проверяет наличие тех же символов, что и isprint, но без пробела.
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 () {
}
Результат
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