C++从C语言继承了一个与字符相关的、非常方便的函数软件包,它可以简化诸如确定字符是否为大写字母、数字、标点符号等工作,这些函数的原型是在头文件cctpye(老式的风格中为ctpye.h)中定义的。例如 ,如ch是一个字母,则isalpha(ch)函数返回一个非零值,否则返回0。同样,如果ch是标点符号(如逗号或者句号),函数ispunct(ch)将返 回true。(这些函数的返回类型为int ,而不是bool,但通常bool转换让您能够将它们视为bool类型。)
使用这些函数比使用AND和OR来测试字符ch是不是字符字母的代码:
if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
与使用isalpha()相比:
if(isalpha(ch))
islapha()不仅更容易使用,而且更通用。AND/OR格式假设A-Z的字符编码是连续的,其他的字符的编码不在这个范围内,这种假设对于ASCII码来说是成立的,但通常并非总是如此的。
下面的程序演示了字符函数库的一些使用:
#include<iostream>
#include<cctype>
using namespace std;
int main()
{
cout<<"Enter text for analysis,and type @ to terminate input."<<endl;
char ch;
int whitespaces=0;
int digits=0;
int chars=0;
int punct=0;
int others=0;
cin.get(ch);
while(ch!='@')
{
if(isalpha(ch))
chars++;
else if(isspace(ch))
whitespaces++;
else if(isdigit(ch))
digits++;
else if(ispunct(ch))
punct++;
else
others++;
cin.get(ch);
}
cout<<chars<<" letters,"<<witespaces<<" witespaces,"<<digits<<" digits,"<<punct<<" punctions."<<otners<<" others.";
cout<<endl;
return 0;
}
下面的表格列出了cctpye软件包中的函数进行总结:
cctpye中的字符函数
函数名称 | 返回值 |
isalnum() | 如果参数是字母数字,即字母或数字,该函数返回true |
isalpha() | 如果参数是字母,该函数返回true |
iscntrl() | 如果参数是控制字符,该函数返回true |
isdigit() | 如果参数是数字(0-9),该函数返回true |
isgraph() | 如果参数是除空格之外的打印字符,该函数返回true |
islower() | 如果参数是小写字母,该函数返回true |
isprint() | 如果参数是打印字符(包括空格),该函数返回true |
ispunct() | 如果参数是标点符号,该函数返回true |
isspace() | 如果参数是标准空白字符,如空格、进纸、换行符、回车、水平制表符或者垂直制表符,该函数返回true |
isupper() | 如果参数是大写字母,该函数返回true |
isxdigit() | 如果参数是十六进制数字,即0—9、a—f、或者A—F,该函数返回true |
tolower() | 如果参数是大写字母,则返回其小写字母,否则返回该参数 |
toupper() | 如果参数是小写字母,则返回其大写字母,否则返回该参数 |