设为首页 加入收藏

TOP

3.2.4 string对象中字符的处理
2013-10-07 00:31:13 来源: 作者: 【 】 浏览:65
Tags:3.2.4 string 对象 字符 处理

3.2.4  string对象中字符的处理

我们经常要对string对象中的单个字符进行处理,例如,通常需要知道某个特殊字符是否为空白字符、字母或数字。表3-3列出了各种字符操作函数,适用于string对象的字符(或其他任何char值)。这些函数都在cctype头文件中定义。

表3-3  cctype定义的函数

 

表3-3中的大部分函数是测试一个给定的字符是否符合条件,并返回一个int值作为真值。如果测试失败,则该函数返回0,否则返回一个(无意义的)非0值,表示被测字符符合条件。

表中的这些函数,可输出的字符是指那些可以显式表示的字符。空白字符则是空格、制表符、垂直制表符、回车符、换行符和进纸符中的任意一种;标点符号则是除了数字、字母或(可输出的)空白字符(如空格)以外的其他字符。

这里给出一个例子,运用这些函数输出一给定string对象中标点符号的个数:

string s("Hello World!!!");
string::size_type punct_cnt = 0;
// count number of punctuation characters in s
for (string::size_type index = 0; index != s.size(); ++index)
    if (ispunct(s[index]))
       ++punct_cnt;
cout << punct_cnt
     << " punctuation characters in " << s << endl;

这个程序的输出结果是:

3 punctuation characters in Hello World!!!

和返回真值的函数不同的是,tolower和toupper函数返回的是字符,返回实参字符本身或返回该字符相应的大小写字符。我们可以用tolower函数把string对象s中的字母改为小写字母,程序如下:

// convert s to lowercase
for (string::size_type index = 0; index != s.size(); ++index)
    s[index] = tolower(s[index]);
cout << s << endl;

得到的结果为:

hello world!!!

建议:采用C标准库头文件的C++(www.cppentry.com)版本                                                   

C++(www.cppentry.com)标准库除了定义了一些特定于C++(www.cppentry.com)的设施外,还包括C标准库。C++(www.cppentry.com)中的头文件cctype其实就是利用了C标准库函数,这些库函数就定义在C标准库的ctype.h头文件中。

C标准库头文件命名形式为name.h,而C++(www.cppentry.com)版本则命名为cname,少了后缀.h而在头文件名前加了c。c表示这个头文件源自C标准库。因此,cctype与ctype.h文件的内容是一样的,只是采用了更适合C++(www.cppentry.com)程序的形式。特别地,cname头文件中定义的名字都定义在命名空间std内,而.h版本中的名字却不是这样。

通常,C++(www.cppentry.com)程序中应采用cname这种头文件的版本,而不采用name.h版本,这样,标准库中的名字在命名空间std中保持一致。使用.h版本会给程序员带来负担,因为他们必须记得哪些标准库名字是从C继承来的,而哪些是C++(www.cppentry.com)所特有的。

习题                                                          

习题3.7  编一程序读入两个string对象,测试它们是否相等。若不相等,则指出两个中哪个较大。接着,改写程序测试它们的长度是否相等,若不相等指出哪个较长。

习题3.8  编一程序,从标准输入读取多个string对象,把它们连接起来存放到一个更大的string对象中。并输出连接后的string对象。接着,改写程序,将连接后相邻string对象以空格隔开。

习题3.9  下列程序实现什么功能?实现合法吗?如果不合法,说明理由。

   string s;
   cout << s[0] << endl;   

习题3.10  编一程序,从string对象中去掉标点符号。要求输入到程序的字符串必须含有标点符号,输出结果则是去掉标点符号后的string对象。

【责任编辑:董书 TEL:(010)68476606】

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇3.2.1 定义和初始化String对象 下一篇3.2.3 string对象的操作

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: