Arduino 字符函数

所有数据都以字符形式输入计算机,包括字母,数字和各种特殊符号。在本章节中,我们讨论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是空白字符:换行符(’n’)、空格符(’ ‘)、换页符(’f’)、回车符(’r’)、水平制表符(’t’)或垂直制表符(’v’),则返回1,否则返回0。

8


int iscntrl(int c)

如果c是控制字符,如换行符(’n’)、换页符(’f’)、回车符(’r’)、水平制表符 (v’)、垂直制表符(’v’)、alert(’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。

例子

以下示例演示如何使用函数 isdigit,isalpha,isalnum isxdigit 函数 isdigit 确定其参数是否为数字(0-9)。函数 isalpha 确定其参数是大写字母(A-Z)还是小写字母(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 ("

digitr"

);

 
  Serial.
print (isdigit( '8' ) ?"

# is a"

: "

# is not a"

) ;

 
  Serial.
print ("

digitr"

);

 
  Serial.
print ("

rAccording to isalpha:r"

);

 
  Serial.
print (isalpha('A' ) ?"

A is a"

: "

A is not a"

);

 
  Serial.
print ("

letterr"

);

 
  Serial.
print (isalpha('A' ) ?"

b is a"

: "

b is not a"

);

 
  Serial.
print ("

letterr"

);

 
  Serial.
print (isalpha('A') ?"

&

is a"

: "

&

is not a"

);

 
  Serial.
print ("

letterr"

);

 
  Serial.
print (isalpha( 'A' ) ?"

4 is a"

:"

4 is not a"

);

 
  Serial.
print ("

letterr"

);

 
  Serial.
print ("

rAccording to isalnum:r"

);

 
  Serial.
print (isalnum( 'A' ) ?"

A is a"

: "

A is not a"

);

  
  Serial.
print ("

digit or a letterr"

);

 
  Serial.
print (isalnum( '8' ) ?"

8 is a"

: "

8 is not a"

) ;

 
  Serial.
print ("

digit or a letterr"

);

 
  Serial.
print (isalnum( '#' ) ?"

# is a"

: "

# is not a"

);

 
  Serial.
print ("

digit or a letterr"

);

 
  Serial.
print ("

rAccording to isxdigit:r"

);

 
  Serial.
print (isxdigit( 'F' ) ?"

F is a"

: "

F is not a"

);

 
  Serial.
print ("

hexadecimal digitr"

);

 
  Serial.
print (isxdigit( 'J' ) ?"

J is a"

: "

J is not a"

) ;

 
  Serial.
print ("

hexadecimal digitr"

);

 
  Serial.
print (isxdigit( '7' ) ?"

7 is a"

: "

7 is not a"

) ;

  
  Serial.
print ("

hexadecimal digitr"

);

 
  Serial.
print (isxdigit( '$' ) ? "

$ is a"

: "

$ is not a"

);

 
  Serial.
print ("

hexadecimal digitr"

);

 
  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”。

例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 letterr"

);

 
  Serial.
print ( islower( 'P') ? "

P is a"

: "

P is not a"

) ;

 
  Serial.
print ("

lowercase letterr"

);

 
  Serial.
print (islower( '5' ) ? "

5 is a"

: "

5 is not a"

);

 
  Serial.
print ( "

lowercase letterr"

);

 
  Serial.
print ( islower( '!' )? "

! is a"

: "

! is not a"

) ;

 
  Serial.
print ("

lowercase letterr"

);

  
  Serial.
print ("

rAccording to isupper:r"

) ;

 
  Serial.
print (isupper ( 'D' ) ? "

D is a"

: "

D is not an"

);

 
  Serial.
print ( "

uppercase letterr"

);

 
  Serial.
print ( isupper ( 'd' )? "

d is a"

: "

d is not an"

) ;

 
  Serial.
print ( "

uppercase letterr"

);

 
  Serial.
print (isupper ( '8' ) ? "

8 is a"

: "

8 is not an"

);

 
  Serial.
print ( "

uppercase letterr"

);

 
  Serial.
print ( islower( '$' )? "

$ is a"

: "

$ is not an"

) ;

 
  Serial.
print ("

uppercase letterr "

);


  }
 
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’),alert(’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 characterrHorizontal tab"

) ;

 
  Serial.
print (isspace( 't' )? "

is a"

: "

is not a"

);

 
  Serial.
print ( "

whitespace charactern"

) ;

 
  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 characterr"

);

 
  Serial.
print (iscntrl( '$' ) ? "

$ is a"

: "

$ is not a"

);

 
  Serial.
print ("

control characterr"

);

 
  Serial.
print ("

rAccording to ispunct:r"

);

 
  Serial.
print (ispunct(';

' ) ?"

;

is a"

: "

;

is not a"

) ;

 
  Serial.
print ("

punctuation characterr"

);

 
  Serial.
print (ispunct('Y' ) ?"

Y is a"

: "

Y is not a"

) ;

 
  Serial.
print ("

punctuation characterr"

);

 
  Serial.
print (ispunct('#' ) ?"

# is a"

: "

# is not a"

) ;

 
  Serial.
print ("

punctuation characterr"

);

  
  Serial.
print ( "

r According to isprint:r"

);

 
  Serial.
print (isprint('$' ) ?"

$ is a"

: "

$ is not a"

);

 
  Serial.
print ("

printing characterrAlert "

);

 
  Serial.
print (isprint('a' ) ?"

is a"

: "

is not a"

);

 
  Serial.
print ("

printing characterrSpace "

);

 
  Serial.
print (isprint(' ' ) ?"

is a"

: "

is not a"

);

 
  Serial.
print ("

printing characterr"

);



  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 spacerSpace "

);

 
  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