字符串转换中使用到的find,substr等函数

对于string类型中的函数使用,比如str.find(),str.replace等,首先介绍一般需要使用到的函数;

目录

替换replace

查找find

截取substr

获取指定字符at

比较字符串是否相等compare

插入insert

char转换string

字符串替换的题目:


替换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;
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

干饭人小龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值