对于string字符串中处理某单个字符串,一般采用的是下标法和普通的for循环。在看C++primer中发现针对不同的情况可以有不同的处理方法。现总结如下:
有一些C函数可以用来处理字符,主要是cctype头文件中的函数,使用要包含该头文件
- isalnum(c) 当c是字母或者数字时为真
- isalpha(c) 当c是字母时为真
- isdigit(c) 当c是数字时为真
- islower(c) 当c是小写字母时为真
- isupper(c) 当c是大写字母时为真
- isspace(c) 当c是空白时为真(包括空格、横向制表符、纵向制表符、回车符、换行符、进纸符中任意种)
- ispunct(c) 当c是标点符号时为真
- toupper(c) 若c为小写字母,将c转换成大写字母输出。不然原样输出
- tolower(c) 若c为大写字母,将c转换成小写字母输出。不然原样输出
以上1-7返回值为bool类型,为真返回true,不然返回false;8-9返回值为字符
处理每个字符串(遍历每个字符串,且对单个字符不做修改,只做判断)基于范围的for语句(C++11新标准)
string str;
for(auto c:str) //c是变量,用于访问str中每一个元素,每次迭代c会初始化为str中的下一个元素;str字符串序列
{ 循环题 }
处理每个字符串(需要对某些字符做出修改):如果要改变string对象中字符的值,则必须把循环中的变量定义为引用类型
string str;
for(auto &c:str) //c是变量,用于访问str中每一个元素,每次迭代c会初始化为str中的下一个元素;str字符串序列
{ 循环题 }
处理部分字符,可以用下标法(最常使用的方法)和迭代器,一般的for循环。
注意使用下标法:
- 首先检查string对象是否为空,若为空不能用下标
- 下标索引不能超出范围,不然引发的bug很难预料,0<=index<string的长度
例子:编写程序,输入一个包含数字的字符串,将数字去除后输出余下的字符部分。
采用基于范围的for语句,遍历每个字符
string str;
cout << "原始字符串为:" << endl;
getline(cin, str); //输入字符串
cout << "去除数字的字符串为:" << endl;
for (auto c : str)
{
if (!isdigit(str[i]))
cout << c;
}
采用普通for循环遍历字符串
string str;
cout << "原始字符串为:" << endl;
getline(cin, str); //输入字符串
if (str.empty())
{
cout << "输入对象为空,请重新输入" << endl;
getline(cin, str);
}
cout << "去除数字的字符串为:" << endl;
for (int i = 0; i < str.size(); i++)
{
if (!isdigit(str[i]))
cout << str[i];
}
cout << endl;
结果:
![](https://i-blog.csdnimg.cn/blog_migrate/024eb9610f651489fe7837f64dab8e68.png)