题目链接:
字符串函数:
1、截取字符串:
//起始位置为3,结束位置为5
string s = "aabcdefg";
//下标从0开始 [从开始位置,结束位置]
string sub = s.substr(3,3);
//输出cde, 有返回值string
//并且原字符串不改变, s="aabcdefg"
2、删除字符串:
//起始位置为3,结束位置为5
string s = "aabcdefg";
//下标从0开始 [从开始位置,删除长度]
s.erase(3,3);
//s = aabfg, 无返回值
3、寻找字符串
//查找 "cde"
string s = "aabcdefg";
//下标从0开始 返回找的的字符串的一个字母下标
int x = s.find("cde");
//x = 3, find函数有返回值
4、插入字符串
//从3插入字符串"ggg"
string s = "aabcdefg";
//从0开始 在3之前插入
s.insert(3, "ggg");
//输出 aabgggcdefg
思路:
题目要求我们在给定两个位置中间插入,这里容易搞混淆:
1、错误写法:
//假设要在a,b之间插入"cde"
string s = "aabfg";
int p1 = s.find("a");
int p2 = s.find("b");
if(p1+1 == p2){
s.insert(p2, "cde");
}
//p1 = 0, p2 = 2;
//输出 s = "aabfg"
这种写法是错误的,它没有在a,b之间插入。它是分别查找a,b在字符串第一次出现的位置,如果a是连续的,那么它就查询不到了。
2、正确写法:
//假设要在a,b之间插入"cde"
string s = "aabfg";
//让k="ab"
string k = ""; k+="a"; k+="b";
//在s中查找ab位置
int p = s.find(k);
//1是a的长度
s.insert(p+1, "cde");
//输出s = "aacdebfg" p = 1;
我们在字符串中查找ab位置,如果能查找到ab,那么返回的是a的位置p, p 在加上 a 的长度,就是插入的位置了。
代码如下:
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N =110;
int n;
string s;
signed main(){
cin >> s; cin >> n;
while(n--){
int start, end;
string p1, p2;
cin >> start >> end >> p1 >> p2;
//剪切
string sub=s.substr(start-1, end-start+1);
s.erase(start-1, end-start+1);
//粘贴
int t = -1;
string m = p1+p2;
int p = s.find(m);
if(p != -1){
t = p+p1.size();
}
if(t != -1){
s.insert(t, sub);
}
else s += sub;
}
cout << s << endl;
return 0;
}