概述
【问题描述】
给定三个字符串s,old_str, new_str,要求从左到右地将s中出现的old_str都替换成new_str(new_str可以是空串)
提示:cin.getline 可以用来处理带空格、制表符等的字符串输入
【输入形式】
输入为三行,按顺序分别为s, old_str, new_str。字符串可能包含空格、制表符等,字符串长度最长为100
【输出形式】
输出为一行,即从左到右将s中所有old_str替换为new_str得到的新的字符串
【样例输入1】
aaac
aa
????
【样例输出1】
????ac
【样例输入2】
caaac
a
9
【样例输出2】
c999c
【样例说明】
对于样例1,通过最前面的“aa”替换成"????",得到“????ac”
对于样例2,通过“a”替换成“9”,则得到“c999c”
本题在之前的基础上的增加了难度,需要正确读入字符串,不仅要在字符串中找到old_str,还要将他在str内替换成new_str,并且old_str和new_str的长度不一定相等。
首先是字符串的读入,由于题目要求(字符串可能包含空格、制表符等),需要用到getline,getline()不受空格等影响,是和运用在本题,具体应用如下:
getline(cin,old_str);
在此过程中我们运用到了新的知识就是字符串中替换部分字符,可直接利用string头文件包含的函数replace,具体实现为:需要改变的字符串.replace(被替换的字符串开始位置,被替换字符串长度,用来替换的字符串);代码如下:
str.replace(i,sizeold,new_str);
解决这个问题之后需要注意题目要求,原字符串改变之后,后部分可能仍存在需被替换的部分,所以对i进行适当增加,并将j进行初始化,否则将影响下一部分的替换。如下
i=i+sizenew-1;j=0;
以上就是本题重点步骤,完整代码如下:
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str;
string old_str;
string new_str;
getline(cin,str);
int size=str.size();
getline(cin,old_str);
int sizeold=old_str.size();
getline(cin,new_str);
int sizenew=new_str.size();
int j=0;
for(int i=0;i<size;i++)
{
if(str[i]==old_str[j])
{
for(int k=i;k<sizeold+i;k++)
{
if(str[k]==old_str[j])
{
j++; continue;
}
else{break;}
}
str.replace(i,sizeold,new_str);
i=i+sizenew-1;j=0;
}
}
cout<<str<<endl;
}
最后
以上就是悦耳冬日为你收集整理的字符串替换-T2-2的全部内容,希望文章能够帮你解决字符串替换-T2-2所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复