string 字符串使用 - 字符处理方法

原创 2017年01月03日 12:07:17

处理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可以是一个序列,数组等

实例练习:
  1. for range使用语法练习
  2. 使用for range 方式输出每一个字符
  3. 使用for range 方式统计标点符号,大写,小写,空格的个数

  1. // for range 新语法
  2. char cs[] = "char arrary";
  3. // for range 的格式 for(declaration:expression)
  4. // 其中 auto c: c表示cs中单个基础元素
  5. // cs:表示一个序列,数组等
  6. // 每次执行完大括号后,decaration 会自动的迭代
  7. for (auto c : cs)
  8. {
  9. cout << c;
  10. }
  11. cout << endl;
  12. // 对于基础元素如果知道其类型char,也可以使用具体的类型
  13. for (char c : cs)
  14. {
  15. cout << c;
  16. }
  17. cout << endl;
  18. //与正规的for 对比
  19. for (int i = 0; i < sizeof(cs)/sizeof(char); i++)
  20. {
  21. cout << cs[i];
  22. }
  23. cout << endl;
  1. string s("Hello world!!! I'm coming!!!");
  2. // 输出每一个字符
  3. for (auto c : s)
  4. {
  5. cout << c;
  6. }
  7. cout << endl;
  8. // 统计标点符号,大写,小写,空格的个数
  9. // 一定要注意使用decltype 来定义类型,
  10. decltype(s.size()) numUpper=0, numLower=0, numSpace=0, numPunct=0;
  11. for (auto c : s)
  12. {
  13. if (isupper(c)) numUpper++;
  14. else if (islower(c)) ++numLower;
  15. else if (isspace(c)) ++numSpace;
  16. else if (ispunct(c)) ++numPunct;
  17. }
  18. cout << "upper num:" << numUpper << endl;
  19. cout << "lower num:" << numLower << endl;
  20. cout << "space num:" << numSpace << endl;
  21. cout << "punct num:" << numPunct << endl;


使用range for语句改变每一个字符

  • 需要使用引用作为循环变量
    • for(auto &c : s)
    • 利用引用的特性:别名,修改引用变量就相当于,变量本身
实例练习:
  1. 使用for range将字符大写
  2. 将数字用星号代替

  1. //3使用引用来修改每一个字符
  2. // 小写变大写,数字变星号
  3. //关键是使用&c 引用来修改
  4. string s("My password is 123456.");
  5. for (auto &c : s)
  6. {
  7. if (islower(c))
  8. {
  9. c = toupper(c);
  10. }
  11. else if (isdigit(c))
  12. {
  13. c = '*';
  14. }
  15. }
  16. cout << s << endl;

使用下标处理部分字符

  • 下标运算符 [ ],中括号里面参数的类型是string::size_type
  • 中括号连表示获得访问字符的位置,返回值是该位置上的字符引用
  • 使用下标迭代执行字符处理:尤其要注意index 类型,
  • 在使用下标中必须要做范围判断:是否为空和获取下标是否超出范围
  • 利用下标随机访问字符串
实例练习:
  1. 利用下标输出每个字符
  2. 修改第一个或者最后一位字符为大写
  3. 修改第一个单词为大写
  4. 实现十进制转换成十六进制

  1. // 4使用下标处理部分字符
  2. // 4.1 使用下标输出每一个字符
  3. string s("abcdefg");
  4. //使用下标就相当于使用数组的形式来访问
  5. //这里尤其要注意下标位置参数时string::type_size类型
  6. //同时要注意其范围的判断
  7. for (decltype(s.size()) i = 0; i < s.size(); i++)
  8. {
  9. cout << s[i];
  10. }
  11. cout << endl;
  12. //4.2修改第一个和最后一个字符为大写
  13. if (!s.empty())
  14. {
  15. s[0] = toupper(s[0]);
  16. s[s.size() - 1] = toupper(s[s.size() - 1]);
  17. }
  18. cout << s<< endl;
  1. //4.3修改第一个单词为大写
  2. string s("Wally program house");
  3. for (decltype(s.size()) i = 0; i < s.size() && !isspace(s[i]); i++)
  4. {
  5. if (isalpha(s[i]))
  6. {
  7. s[i] = toupper(s[i]);
  8. }
  9. }
  10. cout << s << endl;
  11. //4.3 实现十进制转换成十六进制
  12. const string hex("0123456789ABCDEF");
  13. string result;
  14. string::size_type input;
  15. while (cin >> input)
  16. {
  17. if (input<hex.size())
  18. {
  19. result += hex[input];
  20. }
  21. cout << result << endl;
  22. }

版权声明:本文为博主原创文章,欢迎大家转载,请大家在转载时标明出处,谢谢!在成长的道路上,与你同行!

JAVA中String字符串的各种基本操作

/* String类适用于描述字符串事物。 那么它就提供了多个方法对字符串进行操作。 常用的方法如下: 1、获取: 1.1 字符串中包含的字符数,也就是字符串的长度。 int...
  • u012369373
  • u012369373
  • 2015年11月17日 22:35
  • 12055

String字符串的操作

1、字符串数组与字符串之间的转换 一个字符串可以变为一个字符 数组,同样,也可以把一个字符数组,变为一个字符串。 在String类中提供了以下操作方法: 将字符串变为字符数组:   p...
  • hanshileiai
  • hanshileiai
  • 2011年08月16日 16:15
  • 6050

Android-常用String字符串操作方法

String类‭提供了一系列检查字符串所容纳的内容的行为,例如查找字符串的子串、切换字符串大小写等。 通过索引获得字符和子串:  可以通过charAt()方法获得某个字符串指定索引的字符,字符串中...
  • lylzwsy
  • lylzwsy
  • 2016年05月12日 17:36
  • 657

JAVA中String字符串的各种基本操作

/* String类适用于描述字符串事物。 那么它就提供了多个方法对字符串进行操作。 常用的方法如下: 1、获取: 1.1 字符串中包含的字符数,也就是字符串的长度。 int...
  • u012369373
  • u012369373
  • 2015年11月17日 22:35
  • 12055

基于std::string的字符串处理

C++标准模板库std使用广泛。该库中处理字符串的对象为std::string,该对象常用来对字符串分割、替换、提取子字符串等操作。但是由于该库全部使用模板编程,而且函数形式也比较复杂,在使用时经常出...
  • WTT_1988
  • WTT_1988
  • 2014年03月07日 09:41
  • 1625

C++ string函数 与 C字符串处理函数(整理)

C++ string 函数 1、string类的构造函数: string(const char *s);    //用c字符串s初始化 string(int n,char c);     /...
  • cabinriver
  • cabinriver
  • 2013年05月17日 10:50
  • 8380

字符串处理总结(C#String类)

转载地址:http://blog.csdn.net/angelazy/article/details/8501776 C#中提供了比较全面的字符串处理方法,很多函数都进行了封装为我们的编程工作提...
  • wangzhen209
  • wangzhen209
  • 2016年05月18日 10:44
  • 1483

java字符串处理总结

java字符串处理总结
  • baidu_25310663
  • baidu_25310663
  • 2016年04月28日 19:32
  • 392

String字符串操作--切割,截取,替换,查找,比较,去空格.....

字符串拼接 直接用+号:String a = "I"; String b = "love"; String c = "you";String d = a+b+c;就能得到I love you了 "...
  • dl10210950
  • dl10210950
  • 2016年09月16日 19:15
  • 26674

C# 字符串操作——性能优化细节

1、使用string.Empty给一个空字符串变量赋初始值 String.Empty是一个指代,而””是具体的实现 1、使用string.Empty给一个空字符串变量赋初始值 String...
  • mss359681091
  • mss359681091
  • 2017年02月06日 11:28
  • 778
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:string 字符串使用 - 字符处理方法
举报原因:
原因补充:

(最多只允许输入30个字)