1.逆转字符串

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

#include <algorithm>
#include <string>
#include <iostream>
using namespace std; int main()
{
string s("abcdefghijklmnopqrstuvwxyz");
reverse(s.begin(), s.end());
cout<<s;
system("pause");
}

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

#include <string>
#include <iostream>
using namespace std; void StrReverse(string &src, string &dst)
{
for (int i = ; i < src.length(); i++)
{
dst.insert(dst.end(), src[src.length()-i-]);
//dst.push_back(src[src.length()-i-1]);
}
} int main()
{
string s("abcdefghijklmnopqrstuvwxyz");
string dst;
StrReverse(s, dst);
cout<<dst<<endl;
system("pause");
return 0;
}

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

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

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

#include <string>
#include <iostream>
using namespace std; void StrReverse(string &src, string &dst)
{
for (int i = ; i < src.length(); i++)
{
src[src.length()-i-] = tolower(src[src.length()-i-]);//都转化为小写字母
dst.insert(dst.end(), src[src.length()-i-]);
//dst.push_back(src[src.length()-i-1]);
}
} int main()
{
string s("CivIc");
string dst;
StrReverse(s, dst);
cout<<"src:"<<s<<endl;
cout<<"dst:"<<dst<<endl;
cout<<(s == dst ? "true":"false")<<endl;
system("pause");
return ;
}

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

#include <string>
#include <iostream>
using namespace std; //函数功能:删除所有非字母字符
void DelBlank(string &src)
{
for (int i = ; i < src.length(); i++)
{
if (src[i] < 'A' || (src[i] > 'Z' && src[i] < 'a') || src[i] > 'z')
{
src.erase(i, );//删除i位置开始的1个字符
i--;//删除后当前位置需要再次进行判断
}
}
} //函数功能:小写化和逆转字符串
void StrReverse(string &src, string &dst)
{
for (int i = ; i < src.length(); i++)
{
//都转化为小写字母
src[src.length()-i-] = tolower(src[src.length()-i-]); dst.insert(dst.end(), src[src.length()-i-]);
//dst.push_back(src[src.length()-i-1]);
}
} int main()
{
string src("Able was I , ere I saw Elba.");
string dst;
DelBlank(src);
StrReverse(src, dst);
cout<<"src:"<<src<<endl;
cout<<"dst:"<<dst<<endl;
cout<<(src == dst ? "true":"false")<<endl;
system("pause");
return ;
}

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

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

#include <iostream>
using namespace std; int main(int argc, char * argv[])
{
cout<<"argc:"<<argc<<endl;
for (int i = ; i < argc; i++)
{
cout<<"argv["<<i<<"]:"<<argv[i]<<endl;
}
return ;
}

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

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

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

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

#include <iostream>
#include <fstream>
#include <string>
using namespace std; //替换函数:将context中所有from替换为to
string & replaceAll(string& context, const string& from, const string& to)
{
size_t iBegin = ;
size_t iFound; string tmpStr;
//给转化加上标记
tmpStr = to+string("(converted)"); while ( (iFound = context.find(from, iBegin)) != string::npos)
{
//从下标iFound开始替换from.size()长度,替换为tmpStr
context.replace(iFound, from.size(), tmpStr);
//查找下标后移to.size()
iBegin = iFound + to.size();
}
return context;
} int main(int argc, char * argv[])
{
//保证参数个数正确
for (int i = ; i < ; i ++)
{
if (argv[i] == NULL)
{
cout<<"lack of argv!"<<endl;
return ;
}
} string strFrom,strTo;
//要替换的字符串
strFrom = argv[];
//替换后的字符串
strTo = argv[]; ifstream InputFile(argv[]);
string srcStr;
string tmpStr;
string dstStr;
//按整行读取,连接所有行,存在srcStr中
while (getline(InputFile, tmpStr))
{
srcStr += tmpStr;
}
dstStr = replaceAll(srcStr, strFrom, strTo);
cout<<dstStr<<endl; return ;
}

文本文件例子如下:

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

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. netframework webapi IogAttribute记录request参数和错误信息

    参考博客 https://www.cnblogs.com/hnsongbiao/p/7039666.html 书写LogFilterAttribute public class LogFilterAt ...

  2. kotlin中值范围

    值范围表达式用rangeTo函数,该函数的操作符形式是二个点(..)另外还有in 和!in 相关操作符,任何可比较的大小的数据类型都可以定义值范围 值范围应用 fun main(arg: Array& ...

  3. CSS3常用属性及效果汇总

    本文转载于<https://blog.csdn.net/lyznice/article/details/54575905> 一.2D效果属性 要使用这些属性,我们需要通过 transfor ...

  4. python多线程、线程锁

    1.python多线程 多线程可以把空闲时间利用起来 比如有两个进程函数 func1.func2,func1函数里使用sleep休眠一定时间,如果使用单线程调用这两个函数,那么会顺序执行这两个函数 也 ...

  5. webdriervAPI基础元素定位

    from  selenium  import  webdriver driver  =  webdriver.Chorme() driver.get("http://www.baidu.co ...

  6. jenkins部署Vue项目 & 远程到远程服务

    只是记录下自己是怎么配置的,方便自己以后要用的时候查阅 如果使用nodejs打包则需要上图中的脚本,nodejs只是把JavaScript代码去掉空格个换行变成不易于人阅读的方式 (为了方便复制而已, ...

  7. Linear regression with one variable - Model representation

    摘要: 本文是吴恩达 (Andrew Ng)老师<机器学习>课程,第二章<单变量线性回归>中第6课时<模型概述>的视频原文字幕.为本人在视频学习过程中逐字逐句记录下 ...

  8. 【OpenCV开发】使用OpenCV的OpenCL(ocl)模块

    参加OpenCV的OpenCL模块(以下称OCL)移植工作已经有2个月了.这里我说移植而不是开发,是因为大部分OCL模块的函数都是从已经很成熟的GPU模块移植过来的.于是目前阶段OCL模块所支持的函数 ...

  9. mysql常用引擎

    经常用MySQL数据库,但是,你在用的时候注意过没有,数据库的存储引擎,可能有注意但是并不清楚什么意思,可能根本没注意过这个问题,使用了默认的数据库引擎,当然我之前属于后者,后来成了前者,然后就有了这 ...

  10. Python openCV基础操作

    1.图片加载.显示和保存 import cv2 # 读取图片 img = cv2.imread("img1.jpg") # 生成灰色图片 imgGrey = cv2.imread( ...