isalnum(c) 当c是字母或数字时为真
isalpha(c) 当c是字母时为真
iscntrl(c) 当c是控制字符时为真
isdigit (c) 当c是数字时为真
isgraph(c) 当c不是空格但可打印时为真
islower (c) 当c是小写字母时为真
isprint(c) 当c是可打印字符时为真(即c是空格或c具有可视形式)
ispunct(c) 当c是可打印字符时为真(即c是空格或c具有可视形式)
isspace(c) 当c是标点符号时为真(即c不是控制字符、数字、字毋、可打印空白的一种)
isupper(c) 当c是大写字母时为真
isxdigit(c) 当c是十六进制数字时为真
tolower(c) 如果c是大写字毋,输出对应的小写字母:否则原样输出c
toupper(c) 如果c是小写字毋,输出对应的大写字母:否则原样输出c
P83
#include <iostream>
#include <string>
using std::string;
int main()
{
string str("hello world!");
for (auto c : str)//输出str中的每一个字符,包括换行符
{
std::cout << c << std::endl;
}
return 0;
}
运行结果:
/*
h
e
l
l
o
w
o
r
l
d
!
*/
#include <string>
using std::string;
int main()
{
string str("hello world!");
decltype(str.size()) punct_cnt = 0;
for (auto c : str)
{
if (ispunct(c))
{
++punct_cnt;
}
}
std::cout << punct_cnt << "个字符在"<<str<<std::endl;
return 0;
}
运行结果:
/*1个字符在hello world!*/
int main()
{
string str("hello world!");
//转换大写
for (auto &c : str)//&符号不要忘,必须为引用
{
c = toupper(c);//toupper
}
std::cout << str<<std::endl;
return 0;
}
运行结果:
/*HELLO WORLD!*/
int main()
{
string str("hello world!");
if (!str.empty())
{
str[0] = toupper(str[0]);
}
std::cout << str<<std::endl;
return 0;
}
运行结果:
/*Hello world!*/
3.6
int main()
{
string str = "asdfghjkl";
for (auto c : str )
{
c = 'X';
std::cout << c << std::endl;//输出一个字符一行
}
std::cout << str << std::endl;//输出一行字符,要想输出X需要使用引用,auto &c
return 0;
}
运行结果:
X
X
X
X
X
X
X
X
X
asdfghjkl
如果auto c换成 auto &c输出结果:
X
X
X
X
X
X
X
X
X
XXXXXXXXX
3.7
auto换成char型,虽然string输入的是字符串而char是字符,但是for循环是一个字符一个字符读的,也就相当与字符串了
int main()
{
string str = "asdfghjkl";
for (char &c : str )
{
c = 'X';
std::cout << c << std::endl;
}
std::cout << str << std::endl;
return 0;
}
运行结果:
X
X
X
X
X
X
X
X
X
XXXXXXXXX
练习3.10:编写一段程序,读入一个包含标点符号的字符串,将标点符号去除后输出字符串剩余的部分。
int main()
{
string s;
cout << "请输入一个字符串包含符号:" << endl;
getline(cin, s);
for ( auto c : s )
{
if ( !ispunct(c) )
{
cout << c << endl;
}
}
return 0;
}