string 字符串使用 - 字符处理方法
2017-01-03 12:07
375 查看
处理string 对象的字符串
target point如何检查字符中是否出现空白,数字以及特殊字符
怎么将字母的改成大小写
如何获取字符串本身的单个字符或者某一部分
需要使用到的标准库中的cctype 头文件
C++标准库中头文件.h一些解释
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 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;
[/code]
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;
[/code]
使用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;
[/code]
使用下标处理部分字符
下标运算符 [ ],中括号里面参数的类型是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;
[/code]
//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;
}
[/code]
相关文章推荐
- 字符串特殊字符特殊处理方法:stringByTrimmingCharactersInSet
- C# 使用String.Join 和 Distinct 方法 去除字符串中重复字符
- PHP - Manual手册 - CLXI. String 字符串处理函数 - str_pad使用另一个字符串将一个字符串填充到指定长度
- JavaScript_学习 6_字符串处理,String对象的字符串格式化方法
- C#使用String.Format()方法时,出现异常"输入的字符串格式有误"的解决方法
- java字符串格式化:String.format()方法的使用大全
- 使用split分割多字符的字符串的方法
- PHP - Manual手册 - 函数参考 - String 字符串处理函数 - explode使用一个字符串分割另一个字符串
- java.sql.Exception:setString 只能处理少于 32766 个字符的字符串
- 2.7推荐的字符和字符串处理方法
- C#中使用Split分割字符串后,空格处理方法
- Python strip lstrip rstrip使用方法(字符串处理空格)
- 使用split分割多字符的字符串的方法
- C++ 把枚举变量的名称,直接当字符串使用方法 字符串化符号 #
- 使用String.Format()方法时,作为普通字符的"{"和"}"要写成"{{"和"}}"。
- cpp如何快速安全地将文件读入字符串string或字符数组vector<string>的方法
- 在Javascript中对String的一些方法扩展,实现常用的字符串处理。
- Python strip lstrip rstrip使用方法(字符串处理空格)
- Python strip lstrip rstrip使用方法(字符串处理空格)
- istringstream的使用方法——ACM对输入数据的处理方法