Arduino 简明教程
Arduino - Character Functions
所有数据都以字符的形式输入计算机,其中包括字母、数字和各种特殊符号。在本节中,我们将讨论 C++ 检查和操作各个字符的能力。
字符处理库包括几个执行有用的字符数据测试和操作的函数。每个函数接收一个表示为 int 的字符,或将 EOF 作为参数。字符通常被作为整数进行操作。
请记住,EOF 通常具有值 –1,并且某些硬件体系结构不允许将负值存储在 char 变量中。因此,字符处理函数将字符作为整数来处理。
下表总结了字符处理库的函数。当使用字符处理库中的函数时,请包含 <cctype> 头。
S.No. |
Prototype & Description |
1 |
int isdigit( int c ) 如果 c 是一个数字,则返回 1,否则返回 0。 |
2 |
int isalpha( int c ) 如果 c 是一个字母,则返回 1,否则返回 0。 |
3 |
int isalnum( int c ) 如果 c 是一个数字或字母,则返回 1,否则返回 0。 |
4 |
int isxdigit( int c ) 如果 c 是一个十六进制数字字符,则返回 1,否则返回 0。(有关二进制数、八进制数、十进制数和十六进制数的详细解释,请参见附录 D,数字系统。) |
5 |
int islower( int c ) 如果 c 是一个小写字母,则返回 1,否则返回 0。 |
6 |
int isupper( int c ) 如果 c 是一个大写字母,则返回 1;否则返回 0。 |
7 |
int isspace( int c ) 如果 c 是一个空白字符(换行 ('\n')、空格(' ')、换页 ('\f')、回车 ('\r')、水平制表符 ('\t') 或垂直制表符 ('\v'))则返回 1,否则返回 0。 |
8 |
int iscntrl( int c ) 如果 c 是一个控制字符,例如换行 ('\n')、换页 ('\f')、回车 ('\r')、水平制表符 ('\t')、垂直制表符 ('\v')、警告 ('\a') 或退格 ('\b'),则返回 1,否则返回 0。 |
9 |
int ispunct( int c ) 如果 c 是空格、数字或字母之外的打印字符,则返回 1,否则返回 0。 |
10 |
int isprint( int c ) 如果 c 是打印字符(包括空格 (' ')),则返回 1,否则返回 0。 |
11 |
int isgraph( int c ) 如果 c 是空格 (' ') 之外的打印字符,则返回 1,否则返回 0。 |
Examples
以下示例演示了函数 isdigit, isalpha, isalnum 和 isxdigit 的用法。函数 isdigit 确定其参数是否是数字 (0-9)。函数 isalpha 确定其参数是否是仅大写字母 (A-Z) 或仅小写字母 (a-z)。函数 isalnum 确定其参数是否是仅大写字母、仅小写字母或数字。函数 isxdigit 确定其参数是否是十六进制数字 (A-F, a-f, 0-9)。
Example 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 () {
}
Result
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 返回 true(非零)值 - 则打印字符串 "8 是一个 "。如果 '8' 不是一个数字(即如果 isdigit 返回 0),则打印字符串 " 8 不是一个 "。
Example 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 () {
}
Result
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
Example 3
以下示例演示了函数 isspace, iscntrl, ispunct, isprint 和 isgraph 的用法。
-
函数 isspace 确定其参数是否是空白字符,例如空格 (' ')、换页 ('\f')、换行 ('\n')、回车 ('\r')、水平制表符 ('\t') 或垂直制表符 ('\v')。
-
函数 iscntrl 确定其参数是否是控制字符,例如水平制表符 ('\t')、垂直制表符 ('\v')、换页 ('\f')、警告 ('\a')、退格 ('\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 () {
}
Result
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