对于string类型中的函数使用,比如str.find(),str.replace等,首先介绍一般需要使用到的函数;
目录
替换replace
string a; a.replace a.replace(1,1,"");//从第1给下标对应的字符开始取一个字符转换成空字符。 返回值:是替换之后的字符串
例:字符串 a 为 abcdefg 上述替换后 的a 为 acdefg
1.replace(1,2,“”); 此时a为 adefg
如下图:实际操作下string字符串的变化,
查找find
string str="abcdef";//定义一个str字符串;
str.find("a");//返回查找的字符的所在位置,不存在返回-1;
str.find("b",5) //从字符串s 下标5开始,(包括5!!)查找字符串b ,返回b 在s 中的下标,我的理解是从0开始数的字符串。
对于find中使用了不同的参数,一个是string字符串查找,一个是char字符的查找,这都是可以的,有重载,可以跳转到find定义下;
截取substr
对于string.substr是截取string字符串的,string a="abcdefg";
如果string s="hello xiaowang";
string sub1=s.substr(6); 表示从下标6开始一直到字符串结束,下标6刚好是x字符
sub1="xiaowang";
string sub2=s.substr(6,4);表示从下标6开始一直到后面4位数结束
sub2="xiao";
获取指定字符at
string at()用于获取指定字符
at(i),i就是想要获取的字符的下标,函数返回值为指定的字符
用在vector容器中at相当于一个数组的下标,而find就是找取该下标字符串中第几个字符所在的位置,并表示出来。
比较字符串是否相等compare
compare用于比较两个字符串是否相等。
str1.compare(str2);如果相等则输出为0,不等则输出为-1。
插入insert
往字符串中插入数据
在特定位置插入 const string型字符串
(1)string &insert(int p0,const string &s);
功能:在p0位置插入字符串s
返回值:插入字符串后的结果
(2)string &insert(int p0,const string &s, int pos, int n);
功能:在p0位置插入字符串s从pos开始的连续n个字符 第一个数字p0是针对需要原始处理的字符串(即将被其他字符串插入的),pos和n是针对要插入的字符串进行处理的。
返回值:插入字符串后的结果
char转换string
在某些情况下需要char转化为string
如果直接像两个string字符串一样使用=等于号是会报错的;
我们需要使用一些其他方法:
1.const char* a = “hello”;
string b = a; //正确
const char[] a = “hello”;
string b = a; //正确 复制代码
2.利用string(size_t n, char c)
进行单个字符复制到字符串中
string b(1,a); //正确
字符串替换的题目:
已知一个字符串a,b。 字符串b中包含特殊符号’.’,’*’。 ‘.’表示该字符可以变成任意字符,’* ‘表示该字符的前一个字符可以变成任意多个。 现在我们想知道b可否通过特殊符号变成a。 a* 可以转化为a,aa,aaa,aaaa…
输入描述:第一行输入字符串a.(1<=len(a)<=1000) 第二行输入字符串b.(1<=len(b)<=1000)
输出描述:如果可以输出”yes”,否则输出’no’
#include <iostream>
#include <string>
using namespace std;
std::string solution(std::string a, std::string b){
//std::string result;
// TODO:
int astrlen=a.length();
int bstrlen=b.length();
int index;
if (bstrlen>astrlen)
{
return "no";
}
if ((b.find("*")==b.npos)&&(b.find(".")==b.npos))
{
return "no";
}
string acc(1,a[0]); //创建一个存有字符串a相同的字符 方便后边取代".""*"字符
//int i=bstrlen;
while(b.find(".")!=b.npos)
{
index=b.find(".");
b.replace(index,1,acc);
}
if(b.find("*")==0)
{
cout<<"输入有误"<<endl;
return "no";
}
while (b.find("*")!=b.npos)
{
string c=a;
index=b.find("*");
b.replace(index,1,c.substr(0,astrlen-bstrlen+1));
bstrlen=b.length();
}
//cout<<b<<endl;
if (a.compare(b)!=0)
{
return "no";
}
return "yes";
}
int main() {
std::string a;
std::string b;
std::cin>>a;
std::cin>>b;
std::string result = solution(a, b);
std::cout<<result<<std::endl;
return 0;
}