【问题描述】
给定三个字符串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()不受空格等影响,是和运用在本题,具体应用如下:
1getline(cin,old_str);
在此过程中我们运用到了新的知识就是字符串中替换部分字符,可直接利用string头文件包含的函数replace,具体实现为:需要改变的字符串.replace(被替换的字符串开始位置,被替换字符串长度,用来替换的字符串);代码如下:
1str.replace(i,sizeold,new_str);
解决这个问题之后需要注意题目要求,原字符串改变之后,后部分可能仍存在需被替换的部分,所以对i进行适当增加,并将j进行初始化,否则将影响下一部分的替换。如下
1i=i+sizenew-1;j=0;
以上就是本题重点步骤,完整代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34#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内容请搜索靠谱客的其他文章。
发表评论 取消回复