给定一个字符串 s,对其进行若干次复制、剪切、粘贴操作,三种操作具体如下:
复制操作 COPY l r (0≤l≤r<n),n 代表 s 串的长度。表示将子串 s[l]∼s[r] 复制到剪贴板 t 里面,覆盖 t 字符串。例如 s 为 abcde,t 为 pqr,执行 COPY 1 2 后,s 为 abcde,t
为 bc。
剪切操作 CUT l r (0≤l≤r<n)
,n 代表 s 串的长度。表示将子串 s[l]∼s[r] 剪切到剪贴板 t 里面(将该子串在 s 串中删除),覆盖 t 字符串。例如 s 为 abcde,t 为 pqr,执行 CUT 1 2 后,s 为 ade,t
为 bc。
粘贴操作 PASTE p (0≤p<n)
,n 代表 s 串的长度。这个表示将 t 串插入到 s 串 p 位置的后面。t 保持不变。例如 s 为 abcde,t 为 pqr,执行 PASTE 1 后,s 为 abpqrcde ,t为 pqr。对每个操作,输出操作后的 s串。
输入格式
第一行包含字符串 s。
第二行包含整数 m。
接下来 m行,每行包含一个操作指令。
输出格式
对每个操作,输出一行操作后的 s串。
数据范围
初始字符串 s
的长度不超过 100,
1≤m≤100
输入样例:
abcde
5
CUT 1 2
COPY 0 1
PASTE 1
PASTE 1
CUT 1 3
输出样例:
ade
ade
adade
adadade
aade
c++代码(利用容器进行模拟)
#include <iostream>
#include <algorithm>
#include <cstring>
#include <queue>
using namespace std;
const int N=110;
queue<char> q;
string path;
void print()
{
auto x=path;
for(int i=0;!x.empty();i++)
{
printf("%c",x[0]);
x.erase(0,1);
}
puts("");
}
int main()
{
int m;
cin>>path>>m;
while(m--)
{
int l,r;
char op[6];
scanf("%s",op);
if(!strcmp(op,"CUT"))
{
cin>>l>>r;
while(!q.empty()) q.pop();
for(int i=l;i<=r;i++)
{
q.push(path[l]);
path.erase(l,1);
}
print();
}
else if(!strcmp(op,"COPY"))
{
cin>>l>>r;
while(!q.empty()) q.pop();
for(int i=l;i<=r;i++) q.push(path[i]);
print();
}
else
{
cin>>l;
auto x=q;
while(!x.empty())
{
char a;
a=x.front();
x.pop();
path.insert(l+1,1,a);
l++;
}
print();
}
}
return 0;
}