1.逆转字符串

第一种,使用algorithm中reverse函数。

  1. #include <algorithm>
  2. #include <string>
  3. #include <iostream>
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8. string s("abcdefghijklmnopqrstuvwxyz");
  9. reverse(s.begin(), s.end());
  10. cout<<s;
  11. system("pause");
  12. }

第二种,使用string的insert()方法。insert()函数也可以换成push_back(),push_back()内部实现就是用的insert()

  1. #include <string>
  2. #include <iostream>
  3. using namespace std;
  4.  
  5. void StrReverse(string &src, string &dst)
  6. {
  7. for (int i = ; i < src.length(); i++)
  8. {
  9. dst.insert(dst.end(), src[src.length()-i-]);
  10. //dst.push_back(src[src.length()-i-1]);
  11. }
  12. }
  13.  
  14. int main()
  15. {
  16. string s("abcdefghijklmnopqrstuvwxyz");
  17. string dst;
  18. StrReverse(s, dst);
  19. cout<<dst<<endl;
  20. system("pause");
    return 0;
  21. }

2.判断回文字符如 “wow"

可直接使用上面的StrReverse()函数,然后判断 s == dst ? true:false

3.修改题2中程序,使判断忽略大小写。

  1. #include <string>
  2. #include <iostream>
  3. using namespace std;
  4.  
  5. void StrReverse(string &src, string &dst)
  6. {
  7. for (int i = ; i < src.length(); i++)
  8. {
  9. src[src.length()-i-] = tolower(src[src.length()-i-]);//都转化为小写字母
  10. dst.insert(dst.end(), src[src.length()-i-]);
  11. //dst.push_back(src[src.length()-i-1]);
  12. }
  13. }
  14.  
  15. int main()
  16. {
  17. string s("CivIc");
  18. string dst;
  19. StrReverse(s, dst);
  20. cout<<"src:"<<s<<endl;
  21. cout<<"dst:"<<dst<<endl;
  22. cout<<(s == dst ? "true":"false")<<endl;
  23. system("pause");
  24. return ;
  25. }

4.修改题3 中程序,使其能够忽略标点符号和空格。例如"Able was I , ere I saw Elba."也报告true;

  1. #include <string>
  2. #include <iostream>
  3. using namespace std;
  4.  
  5. //函数功能:删除所有非字母字符
  6. void DelBlank(string &src)
  7. {
  8. for (int i = ; i < src.length(); i++)
  9. {
  10. if (src[i] < 'A' || (src[i] > 'Z' && src[i] < 'a') || src[i] > 'z')
  11. {
  12. src.erase(i, );//删除i位置开始的1个字符
  13. i--;//删除后当前位置需要再次进行判断
  14. }
  15. }
  16. }
  17.  
  18. //函数功能:小写化和逆转字符串
  19. void StrReverse(string &src, string &dst)
  20. {
  21. for (int i = ; i < src.length(); i++)
  22. {
  23. //都转化为小写字母
  24. src[src.length()-i-] = tolower(src[src.length()-i-]);
  25.  
  26. dst.insert(dst.end(), src[src.length()-i-]);
  27. //dst.push_back(src[src.length()-i-1]);
  28. }
  29. }
  30.  
  31. int main()
  32. {
  33. string src("Able was I , ere I saw Elba.");
  34. string dst;
  35. DelBlank(src);
  36. StrReverse(src, dst);
  37. cout<<"src:"<<src<<endl;
  38. cout<<"dst:"<<dst<<endl;
  39. cout<<(src == dst ? "true":"false")<<endl;
  40. system("pause");
  41. return ;
  42. }

5.编写一个名为replace的程序,接受3个命令行参数,其中一个参数表示输入的文本文件;一个参数表示被替换掉的字符串(称为from);还有一个表示替换后的字符串(称为to)。此程序应该将一个新文件写到标准输出,并将所有的from被to代替的事件显示出来。

这里生成在命令行执行程序,需要给main()函数带参数,关于main()函数参数,如下:

  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int main(int argc, char * argv[])
  5. {
  6. cout<<"argc:"<<argc<<endl;
  7. for (int i = ; i < argc; i++)
  8. {
  9. cout<<"argv["<<i<<"]:"<<argv[i]<<endl;
  10. }
  11. return ;
  12. }

运行时,”开始“-命令行里输入cmd,进入命令框,用cd 命令进入到程序所在目录,找到Debug下程序,这里是ex3_1,执行时,输入程序名+任意个用空格隔开的字符串参数。回车执行。

关于main()函数的参数,第一个是int 型的argc, 表示参数的个数,arg表示引数,参数,在计算机编程中常用,是argument的缩写。c表示counter,表示计数。第二个参数是char *数组,也可以写成char **argv,arg同样是参数,v表示vector,表示参数表。

其中,第一个参数即argv[0]是程序名自身。后面才依次是执行时给它的参数。

本题中程序要接收3个参数,第一个表示输入的文本文件,可以用写好的txt文件的路径+文件名,把文件放在程序同一个目录下即可以直接使用文件名,接下来的两个参数就是要替换的字符串和替换后的字符串,结果写到标准输出,那这里就是屏幕输出。还要将所有的替换事件写出来。

  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4. using namespace std;
  5.  
  6. //替换函数:将context中所有from替换为to
  7. string & replaceAll(string& context, const string& from, const string& to)
  8. {
  9. size_t iBegin = ;
  10. size_t iFound;
  11.  
  12. string tmpStr;
  13. //给转化加上标记
  14. tmpStr = to+string("(converted)");
  15.  
  16. while ( (iFound = context.find(from, iBegin)) != string::npos)
  17. {
  18. //从下标iFound开始替换from.size()长度,替换为tmpStr
  19. context.replace(iFound, from.size(), tmpStr);
  20. //查找下标后移to.size()
  21. iBegin = iFound + to.size();
  22. }
  23. return context;
  24. }
  25.  
  26. int main(int argc, char * argv[])
  27. {
  28. //保证参数个数正确
  29. for (int i = ; i < ; i ++)
  30. {
  31. if (argv[i] == NULL)
  32. {
  33. cout<<"lack of argv!"<<endl;
  34. return ;
  35. }
  36. }
  37.  
  38. string strFrom,strTo;
  39. //要替换的字符串
  40. strFrom = argv[];
  41. //替换后的字符串
  42. strTo = argv[];
  43.  
  44. ifstream InputFile(argv[]);
  45. string srcStr;
  46. string tmpStr;
  47. string dstStr;
  48. //按整行读取,连接所有行,存在srcStr中
  49. while (getline(InputFile, tmpStr))
  50. {
  51. srcStr += tmpStr;
  52. }
  53. dstStr = replaceAll(srcStr, strFrom, strTo);
  54. cout<<dstStr<<endl;
  55.  
  56. return ;
  57. }

文本文件例子如下:

执行过程即输出结果如下:

C++string类字符串学习的更多相关文章

  1. hiho1482出勤记录II(string类字符串中查找字符串,库函数的应用)

    string类中有很多好用的函数,这里介绍在string类字符串中查找字符串的函数. string类字符串中查找字符串一般可以用: 1.s.find(s1)函数,从前往后查找与目标字符串匹配的第一个位 ...

  2. C++ string类的学习

    string类对于处理字符串的一些应用非常的方便,我个人感觉,string和字符数组const char *很像,而且又比字符数组用起来方便的多. 注意其删除,取子串,插入等函数里面都有一个重载版本是 ...

  3. 《java入门》第一季之类(String类字符串一旦被赋值就没法改变)

    毫无疑问,String类是java里面最重要的类之一.因此它有很多方法需要了解和掌握. 字符串一旦被赋值,值就不能发生改变: package cn.itcast_02; /* * 字符串的特点:一旦被 ...

  4. 常用类一一字符串相关类一一String类 字符串的使用

    Java字符串就是Unicode字符序列,例如“Java”就是4个Unicode字符J,a,v,a组成的. Java没有内置的字符串类型,而是在标准Java类库中提供了一个预定义的类String,每个 ...

  5. 关于C语言打印string类字符串的问题

    首先因为printf函数输出字符串是针对char *的,即printf只能输出c语言的内置数据,而string不是c语言的内置数据. 其次string类型的对象不止包含字符串,还包含了许多用于操作的函 ...

  6. 01.String类字符串本质

    String类是在java开发过程中,使用最最频繁的一个类,不管是 用户名 密码 还是http报文接收过来的数据,其本质就是字符序列 所以做为一个java开发者,我们要重点掌握好String的方法使用 ...

  7. 萌新笔记——C++里将string类字符串(utf-8编码)分解成单个字(可中英混输)

    最近在建词典,使用Trie字典树,需要把字符串分解成单个字.由于传入的字符串中可能包含中文或者英文,它们的字节数并不相同.一开始天真地认为中文就是两个字节,于是很happy地直接判断当前位置的字符的A ...

  8. String类字符串截取示范

    package it.com; // 要求:對字符串“jflksjdfnbalkdfjnbaddddnbahhuhnbauuuuahnbahdfunbadhfudf”进行检索:判断有多少个nba; / ...

  9. STL --> string类字符串

    基本使用方法 一.输入 string s: cin >> s; getline(cin, s) ; //使用默认的'\n'作为终止符 getline(cin, s, '!') ; //以' ...

随机推荐

  1. 一、mysql下载与安装

    1.下载 官网:https://www.mysql.com/ 注意,其实我看了好的博文,下载截图五花八门,官网内容是变动的,布局也不一样,所以不要指望标准参照那个博文去找到安装包下载: 不过,你可以不 ...

  2. Oracle 的 oracle 数据库分类

    一.数据库分类 1.小型数据库:access.foxbase 2.中型数据库:informix.sql server.mysql 3.大型数据库:sybase.db2.oracle 二.项目中如何合理 ...

  3. kotlin中this 表达式

    this表达式,可以表示当前函数的接收者,在类的成员函数中,this 指向这个类的当前对象实例,在扩展函数中或带有接收者数字面值,this代表调用函数时,在点号左侧传递的接收者参数 如果this没有限 ...

  4. JAVA 基础编程练习题30 【程序 30 插入数字】

    30 [程序 30 插入数字] 题目:有一个已经排好序的数组.现输入一个数,要求按原来的规律将它插入数组中. 程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的 ...

  5. JavaScript基础------JavaScript语法

    js的注释与分号 // 单行注释 /**/多行注释 ctrl +shift +/ 语句结束使用分号,如果省略,则由解析器确定语句的结尾js语法 1.变量.函数名.操作符都区分大小写 2.标识符 (1) ...

  6. Django:(06)Django模版

    一.模版的使用 配置 如果是命令行创建的项目需要手动配置模版文件目录(如果是Pycharm创建的项目则无需配置) 在项目根目录下创建目录templates, 用来存放模版文件 在项目的配置文件夹set ...

  7. elasticsearch 的post put 方式的对比 setting mapping设置 - 添加查询数据

    1.POST和PUT都可以用于创建 2.PUT是幂等方法,POST不是.所以post用户更新,put用于新增比较合适. 参考:https://yq.aliyun.com/articles/366099 ...

  8. 原生js实现图片的3d效果

    <!doctype html><html lang="en"><head><meta charset="UTF-8"& ...

  9. Nginx04---实现直播

    比如树莓派开启一个直播服务如何开启: 百度搜索:搭建自己的直播服务器(nginx + RTMP)

  10. [转] zookeeper 本地启动多节点

    1. zoo.cfg配置文件如下: # The number of milliseconds of each tick tickTime=2000 # The number of ticks that ...