一 处理每个字符
cctype中的常用函数
函数名称 返回值
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() 如果参数是小写字符,返回其大写,否则返回该参数
//处理每个字符,使用基于范围的for语句
//一 使用for语句把string对象中的字符每行一个输出出来吧
string str("some string");
for (auto c : str)
{
cout << c << endl;
}
二 统计string对象中标点符号的个数
/ 二 使用for语句和ispunct函数来统计string对象中标点符号的个数
//注意包含头文件<cctype>
string s("Hello World !!!");
//punct_cnt的类型和s.size()的返回类型一样;
decltype (s.size()) punct_cnt = 0;
for (auto& c : s)
if (ispunct(c))
++punct_cnt;
cout << punct_cnt << " punctuation characters" << s << endl;
-----------------------
3 punctuation charactersHello World !!!
****punct_cnt,类型是s.size()函数返回值的类型,也就是string::size_type.
三 使用for语句改变字符串中的字符
- 循环变量需要定义成引用类型
- 使用标准库函数toupper,该函数接受一个字符,然后输出其对应的大写形式
string s("Hello World");
//转换为大写形式
for (auto& c : s) //c是引用
c = toupper(c); //c是引用,因此赋值语句将改变s中的字符
cout << s << endl;
----------------------------------
HELLO WORLD
四 只处理一部分字符,将首字符改写成大写形式
string s("some string");
if (!s.empty())
s[0] = toupper(s[0]);
cout << s << endl;
------------------------
Some string
五 将s的第一个单词改写成大写形式
string s("some string");
for (decltype(s.size()) index = 0;
index != s.size() && !isspace(s[index]); ++index)
s[index] = toupper(s[index]);
cout << s << endl;
----------------------------------
SOME string