所有数据都以字符形式输入计算机,包括字母,数字和各种特殊符号。在本章节中,我们讨论C++检查和操作单个字符的功能。
字符处理库包括几个函数,执行有用的测试和字符数据的操作。每个函数接收一个字符,表示为int或EOF作为参数。字符通常作为整数操作。
记住,EOF通常具有值-1,而一些硬件架构不允许负值存储在char变量中。因此,字符处理函数将字符作为整数来操作。
下表总结了字符处理库的函数。使用字符处理库中的函数时,请包含<cctype>标题。
序号 | 原型和描述 |
---|---|
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。 |
5 | int islower(int c) 如果c是小写字母,则返回1,否则返回0。 |
6 | int isupper(int c) 如果c是大写字母,则返回1;否则返回0。 |
7 | int isspace(int c)
如果c是空白字符:换行符(
|
8 | int iscntrl(int c) 如果c是控制字符,如换行符( |
9 | int ispunct(int c) 如果c是除空格,数字或字母以外的打印字符,则返回1,否则返回0。 |
10 | int isprint(int c) 如果c是包含空格( )的打印字符,则返回1,否则返回0。 |
11 | int isgraph(int c) 如果c是除空格( )之外的打印字符,则返回1,否则返回0。 |
以下示例演示如何使用函数 isdigit,isalpha,isalnum 和 isxdigit 。函数 isdigit 确定其参数是否为数字(0-9)。函数 isalpha 确定其参数是大写字母(A-Z)还是小写字母(a-z)。函数 isalnum 确定其参数是大写,小写字母还是数字。函数 isxdigit 确定其参数是否为十六进制数字(A-F,a-f,0-9)。
void setup () { Serial.begin (9600); Serial.print ("According to isdigit: "); Serial.print (isdigit( 8 ) ? "8 is a": "8 is not a"); Serial.print (" digit " ); Serial.print (isdigit( 8 ) ?"# is a": "# is not a") ; Serial.print (" digit "); Serial.print (" According to isalpha: " ); Serial.print (isalpha(A ) ?"A is a": "A is not a"); Serial.print (" letter "); Serial.print (isalpha(A ) ?"b is a": "b is not a"); Serial.print (" letter "); Serial.print (isalpha(A) ?"& is a": "& is not a"); Serial.print (" letter "); Serial.print (isalpha( A ) ?"4 is a":"4 is not a"); Serial.print (" letter "); Serial.print (" According to isalnum: "); Serial.print (isalnum( A ) ?"A is a" : "A is not a" ); Serial.print (" digit or a letter " ); Serial.print (isalnum( 8 ) ?"8 is a" : "8 is not a" ) ; Serial.print (" digit or a letter "); Serial.print (isalnum( # ) ?"# is a" : "# is not a" ); Serial.print (" digit or a letter "); Serial.print (" According to isxdigit: "); Serial.print (isxdigit( F ) ?"F is a" : "F is not a" ); Serial.print (" hexadecimal digit " ); Serial.print (isxdigit( J ) ?"J is a" : "J is not a" ) ; Serial.print (" hexadecimal digit " ); Serial.print (isxdigit( 7 ) ?"7 is a" : "7 is not a" ) ; Serial.print (" hexadecimal digit " ); Serial.print (isxdigit( $ ) ? "$ is a" : "$ is not a" ); Serial.print (" hexadecimal digit " ); 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
我们对每个函数使用条件运算符(?:)来确定字符串“is a”或字符串“is not a”是否应该打印在每个测试字符的输出中。例如,行a表示如果“8”是数字,即如果isdigit返回真(非零)值,则打印字符串“8 is a”。如果“8”不是数字(即,如果isdigit返回0),则打印字符串“8 is not a”。
以下示例演示了函数 islower 和 isupper 的使用。函数 islower 确定其参数是否为小写字母(a-z)。函数 isupper 确定其参数是否为大写字母(A-Z)。
int thisChar = 0xA0; void setup () { Serial.begin (9600); Serial.print ("According to islower: ") ; Serial.print (islower( p ) ? "p is a" : "p is not a" ); Serial.print ( " lowercase letter " ); Serial.print ( islower( P) ? "P is a" : "P is not a") ; Serial.print ("lowercase letter "); Serial.print (islower( 5 ) ? "5 is a" : "5 is not a" ); Serial.print ( " lowercase letter " ); Serial.print ( islower( ! )? "! is a" : "! is not a") ; Serial.print ("lowercase letter "); Serial.print (" According to isupper: ") ; Serial.print (isupper ( D ) ? "D is a" : "D is not an" ); Serial.print ( " uppercase letter " ); Serial.print ( isupper ( d )? "d is a" : "d is not an") ; Serial.print ( " uppercase letter " ); Serial.print (isupper ( 8 ) ? "8 is a" : "8 is not an" ); Serial.print ( " uppercase letter " ); Serial.print ( islower( $ )? "$ is a" : "$ is not an") ; Serial.print ("uppercase letter "); } 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
以下示例演示如何使用函数 isspace,iscntrl,ispunct,isprint 和 isgraph 。
函数 isspace 确定其参数是否为空白字符,例如空格( ),换页符(f),换行符(
),回车符(
),水平制表符( )或垂直制表符(v)。
函数 iscntrl 确定其参数是否为控制字符,如水平制表符( ),垂直制表符(v),换页符(f),alert(a),退格符(),回车符(
)或换行符(
)。
函数 ispunct 确定其参数是否是除空格,数字或字母以外的打印字符(例如$,#,(,),[,],{,},;,:或%)。
函数 isprint 确定其参数是否为可以在屏幕上显示的字符(包括空格字符)。
函数 isgraph 测试与isprint相同的字符,但不包括空格字符。
void setup () { Serial.begin (9600); Serial.print ( " According to isspace: Newline ") ; Serial.print (isspace( )? " is a" : " is not a" ); Serial.print ( " whitespace character Horizontal tab") ; Serial.print (isspace( )? " is a" : " is not a" ); Serial.print ( " whitespace character ") ; Serial.print (isspace(%)? " % is a" : " % is not a" ); Serial.print ( " According to iscntrl: Newline") ; Serial.print ( iscntrl( )?"is a" : " is not a" ) ; Serial.print (" control character "); Serial.print (iscntrl( $ ) ? " $ is a" : " $ is not a" ); Serial.print (" control character "); Serial.print (" According to ispunct: "); Serial.print (ispunct(; ) ?"; is a" : "; is not a" ) ; Serial.print (" punctuation character "); Serial.print (ispunct(Y ) ?"Y is a" : "Y is not a" ) ; Serial.print ("punctuation character "); Serial.print (ispunct(# ) ?"# is a" : "# is not a" ) ; Serial.print ("punctuation character "); Serial.print ( " According to isprint: "); Serial.print (isprint($ ) ?"$ is a" : "$ is not a" ); Serial.print (" printing character Alert "); Serial.print (isprint(a ) ?" is a" : " is not a" ); Serial.print (" printing character Space "); Serial.print (isprint( ) ?" is a" : " is not a" ); Serial.print (" printing character "); Serial.print (" According to isgraph: "); Serial.print (isgraph (Q ) ?"Q is a" : "Q is not a" ); Serial.print ("printing character other than a space Space "); 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