处理string 对象的字符串
target point
- 如何检查字符中是否出现空白,数字以及特殊字符
- 怎么将字母的改成大小写
- 如何获取字符串本身的单个字符或者某一部分
需要使用到的标准库中的cctype 头文件
![]()
C++标准库中头文件.h一些解释
- C++标准库中,是可以兼容使用C语言的标准库
- C++ 为了更加符合其规范,又重新做了规范修改
- 比如 C语言头文件 ctype.h, 在C++中改成了 cctype
- 去掉了.h 前面加了c表示C标准库
- 这样修改后就是C++标准的命名空间的库了,不需要记住其继承的过程
- C++标准库中,是可以兼容使用C语言的标准库
- C++ 为了更加符合其规范,又重新做了规范修改
- 比如 C语言头文件 ctype.h, 在C++中改成了 cctype
- 去掉了.h 前面加了c表示C标准库
- 这样修改后就是C++标准的命名空间的库了,不需要记住其继承的过程
使用range for语句获得或统计字符
- for 语句新的语法格式
- for(declaration:expression) statement
- expression 就是一个序列(vector,arrary,list等)
- declaration 需要从序列中访问的单个元素 ,一般使用auto
- statement 对于单个元素的处理
- 每次执行完statement后,decaration 会自动的迭代
- 几点理解
- 对比普通的使用 for(declaration;expression;++)
- 里面比较重要的一个理解是:这个冒号表示自动的迭代,有点像C#中的foreache
- 对于基础元素的类型定义的时候要学会使用auto这样的关键
- 对于基础元素如果知道其类型,也可以使用具体的类型
- expression可以是一个序列,数组等
- for(declaration:expression) statement
- expression 就是一个序列(vector,arrary,list等)
- declaration 需要从序列中访问的单个元素 ,一般使用auto
- statement 对于单个元素的处理
- 每次执行完statement后,decaration 会自动的迭代
- 对比普通的使用 for(declaration;expression;++)
- 里面比较重要的一个理解是:这个冒号表示自动的迭代,有点像C#中的foreache
- 对于基础元素的类型定义的时候要学会使用auto这样的关键
- 对于基础元素如果知道其类型,也可以使用具体的类型
- expression可以是一个序列,数组等
实例练习:
- for range使用语法练习
- 使用for range 方式输出每一个字符
- 使用for range 方式统计标点符号,大写,小写,空格的个数
// for range 新语法char cs[] = "char arrary";// for range 的格式 for(declaration:expression)// 其中 auto c: c表示cs中单个基础元素// cs:表示一个序列,数组等// 每次执行完大括号后,decaration 会自动的迭代for (auto c : cs){cout << c;}cout << endl;// 对于基础元素如果知道其类型char,也可以使用具体的类型for (char c : cs){cout << c;}cout << endl;//与正规的for 对比for (int i = 0; i < sizeof(cs)/sizeof(char); i++){cout << cs[i];}cout << endl;
string s("Hello world!!! I'm coming!!!");// 输出每一个字符for (auto c : s){cout << c;}cout << endl;// 统计标点符号,大写,小写,空格的个数// 一定要注意使用decltype 来定义类型,decltype(s.size()) numUpper=0, numLower=0, numSpace=0, numPunct=0;for (auto c : s){if (isupper(c)) numUpper++;else if (islower(c)) ++numLower;else if (isspace(c)) ++numSpace;else if (ispunct(c)) ++numPunct;}cout << "upper num:" << numUpper << endl;cout << "lower num:" << numLower << endl;cout << "space num:" << numSpace << endl;cout << "punct num:" << numPunct << endl;
使用range for语句改变每一个字符
- 需要使用引用作为循环变量
- for(auto &c : s)
- 利用引用的特性:别名,修改引用变量就相当于,变量本身
实例练习:
- 使用for range将字符大写
- 将数字用星号代替
//3使用引用来修改每一个字符// 小写变大写,数字变星号//关键是使用&c 引用来修改string s("My password is 123456.");for (auto &c : s){if (islower(c)){c = toupper(c);}else if (isdigit(c)){c = '*';}}cout << s << endl;
使用下标处理部分字符
- 下标运算符 [ ],中括号里面参数的类型是string::size_type
- 中括号连表示获得访问字符的位置,返回值是该位置上的字符引用
- 使用下标迭代执行字符处理:尤其要注意index 类型,
- 在使用下标中必须要做范围判断:是否为空和获取下标是否超出范围
- 利用下标随机访问字符串
实例练习:
- 利用下标输出每个字符
- 修改第一个或者最后一位字符为大写
- 修改第一个单词为大写
- 实现十进制转换成十六进制
// 4使用下标处理部分字符// 4.1 使用下标输出每一个字符string s("abcdefg");//使用下标就相当于使用数组的形式来访问//这里尤其要注意下标位置参数时string::type_size类型//同时要注意其范围的判断for (decltype(s.size()) i = 0; i < s.size(); i++){cout << s[i];}cout << endl;//4.2修改第一个和最后一个字符为大写if (!s.empty()){s[0] = toupper(s[0]);s[s.size() - 1] = toupper(s[s.size() - 1]);}cout << s<< endl;
//4.3修改第一个单词为大写string s("Wally program house");for (decltype(s.size()) i = 0; i < s.size() && !isspace(s[i]); i++){if (isalpha(s[i])){s[i] = toupper(s[i]);}}cout << s << endl;//4.3 实现十进制转换成十六进制const string hex("0123456789ABCDEF");string result;string::size_type input;while (cin >> input){if (input<hex.size()){result += hex[input];}cout << result << endl;}

本文介绍C++中处理字符串的方法,包括使用range-for循环遍历和统计字符串中的字符类型、利用引用修改字符以及通过下标操作字符串的部分内容。

被折叠的 条评论
为什么被折叠?



