//这里的参数2也可以为const string& str,意思是一样的,都是字符串
string& replace(int pos,int n,const char* s) //替换从pos开始的n个字符为字符串s
find()函数:作用为从左往右,查找目标字符或字符串。查找成功则返回第一个目标字符或者字串的位置。
//find函数原形:查找str第一次出现位置,从pos开始查找,完成后返回int类型的下标值,这里的参数1也可以为const char* c,意思一样的
int find(const string& str, int pos = 0)const
//实例
string num = "I love china";
int pos = num.find("lo");
cout << pos << endl;//输出2
这里还有一个rfind()函数,其是从右往左,查找第一个目标字符的位置
//rfind函数原型:查找str第一次出现的位置,从pos开始查找,并返回int类型的下标 ,这里的参数1也可以为const char* c,意思一样的
int rfind(const string& str, int pos = npos)const
//示例
string num = "I love china lo";
int pos = num.rfind("lo");
cout << pos << endl;//输出13
可以看到find和rfind的区别就是,find是从左往右找第一个目标字符。rfind是从右往左,也就是找最后一个目标字符。
#include
#include
using namespace std;
int main()
{
string str("123454321");
string a, b;
a = str.replace(str.find("2"), 1, "*");
cout << a << endl; //输出 1*3454321
return 0;
}
可以看到,就算结合了find()函数,也只能返回第一个查找成功的字符或字符串的位置。因此,如果希望替换掉字符串中所有指定的字符或字符串,可以用regex_replace()。具体用法如下:
//头文件
#include
#include
#include
using std::cout; using std::cin;
using std::endl; using std::string;
//利用regex_replace必须具备以下两个
using std::regex_replace; using std::regex;
int main()
{
string equation = "x+6-x+3=6-x-3";//定义一个字符串
string order = "+-";//定义目标字符串(也可以是字符)
//Step1: 利用正则替换 regex_replace 将字符串中的"-"号 替换 为"+-"号
string equ = regex_replace(equation, regex("-"), order);
cout << equ <<endl; //输出: x+6+-x+3=6+-x+-3
}
return 0;
}
因此我们可以直到正则替换函数中的参数的意义为:
regex_replace(std::string str,std::regex reg,std::string replace)
参数1:std::string: 返回值:为原字符串string执行 替换规则后 输出的新的字符串str
参数2:std::regex reg:替换规则中 被替换 的 原目标字符或字符串
参数3:std::string replace 替换规则中 替换 的 新目标字符或字符串
正则替换的多种用法链接
先看下面代码:
//Step2:利用substr截取一段字符串
string equ = "x+6+-x+3=6+-x+-3"
for (int i = 0; i < equ.length(); i++)
{
if (equ[i] == '=')
{
string left_equ = equ.substr(0, i); //截取"="号左边字符串
string right_equ = equ.substr(i + 1);//截取"="号右边字符串
cout << "=号左边字符串: " << left_equ << endl;//输出: =号左边字符串: x+6+-x+3
cout << "=号右边字符串:" << right_equ << endl;//输出:=号右边字符串: 6+-x+-3
}
}
其中:
substr用法1:
str.substr(pos,len)
参数1 pos:字符串起始的截取位置下标
参数2 len:截取字符串的个数
substr用法2:
str.substr(pos)
pos的默认值是0,也就是说默认从字符串的起始位置开始截取子字符串
len的默认值是str.size()-pos,也就是说如果没有参数len,会默认截取从pos开始的整个子字符串str
C++的标准库中没有字符分割函数split(),因此只能使用其函数原型strtok(),具体使用看如下代码:
#define _CRT_SECURE_NO_DEPRECATE //不加该定义的化会报错(vs2017中,其他版本不清楚)
#include
#include
using namespace std;
int main()
{
string equation = "x+6-x+3=6-x-3";
const char *equ = equation.data();//string类型转化为char类型
const char *d = "+";
char *p;
p = strtok((char *)equ, d);
while (p != NULL)
{
cout << p<<endl;
p = strtok(NULL, d);
}
system("pause");
return 0;
}
其中
char *strtok(char *str,const char *delim);
参数1:需要分割的原字符串
参数2:分割的目标字符或字符串