AcWing 5009. 剪切粘贴
原题链接
简单
作者:
面朝大海
,
2024-04-14 21:07:31
,
所有人可见
,
阅读 13
//#include<bits/stdc++.h>
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s;
int n,i;
cin>>s>>n;
int a,b;
string s1,s2,sc;
for(i=0;i<n;i++)
{
cin>>a>>b>>s1>>s2;
sc=s.substr(a-1,b-a+1);//s.函数
s.erase(a-1,b-a+1);//截取后记得删除(题意)
int v1,v2;
v1=s.find(s1);//!!!!!!!!!!!!!!!!!!!!!!!!实际下标
//cout<<v1<<endl;//输出程序过程中的返回值,来验证猜想
v2=s.find(s2,v1+s1.length());//!!!!!!!!!!!!最重要的:实际下标,找 [v1+s1.length(),n] ,千万不要少一个
//cout<<v2<<endl;
//或string s22=s.substr(v1+s1.length())
//cout<<v1<<v2<<endl;
if(v1==-1||v2==-1) s=s+sc;//!!!!!!!!!!!!!!!在所找“范围内”,找不到就返回-1
else {
while(v1+s1.length()!=v2)//!!!!!!!!!!!!最重要的
{
v1=s.find(s1,v1+1);//不包括v1
v2=s.find(s2,v1+s1.length());//字符串在前,找范围在后
if(v1==-1||v2==-1) break;
}
if(v1==-1||v2==-1) s=s+sc;
else s.insert(v2,sc);//位置在前,插入的字符串在后
}
}
cout<<s<<endl;
return 0;
}
orz