问题描述
有以下三种操作。
(1)COPY l r(0<=l<=r<n),n代表s串的长度。这个表示将s串从l到r的序列复制到剪贴板t里面,覆盖t字符串。
例如s为abcde t为pqr
执行COPY 1 2变为
s为abcde t为bc
(2)CUT l r(0<=l<=r<n),n代表s串的长度。这个表示将s串从l到r的序列剪切到剪贴板t里面(删除s串中的l到r的序列),覆盖t字符串。
例如s为abcde t为pqr
执行CUT 1 2变为
s为ade t为bc
(3)PASTE p(0<=p<n),n代表s串的长度。这个表示将t串插入到s串p位置的后面。t保持不变。
例如s为abcde t为pqr
执行PASTE 1 变为
s为abpqrcde t为pqr
Input
输入正整数N,表示N例测试。首先给你s串,再给你一个m,然后给你m个操作。
Output
对每个操作,输出操作后的s串。
Sample Input
abcde
5
CUT 1 2
COPY 0 1
PASTE 1
PASTE 1
CUT 1 3
Sample Output
ade
ade
adade
adadade
aade
P.S.字符串操作还是要练练手,好久没拿这种题练手了啊。。。
1 #include <iostream> 2 #include<string> 5 using namespace std; 6 7 int main() 8 { 9 int n; 10 cin >> n; 11 string s; 12 cin >> s; 13 string t; 14 while(n--){ 15 string op; 16 cin >> op; 17 if(op=="CUT"){ 18 int l,r; 19 cin >> l; 20 cin >> r; 21 string temp; 22 for(int i=l;i<=r;i++) 23 temp+=s[i]; 24 t=temp; 25 s.erase(l,r); 26 cout << s <<endl; 27 } 28 else if(op=="COPY"){ 29 int l,r; 30 cin >> l; 31 cin >> r; 32 string temp; 33 for(int i=l;i<=r;i++) 34 temp+=s[i]; 35 t=temp; 36 cout << s <<endl; 37 } 38 else if(op=="PASTE"){ 39 int p; 40 cin >> p; 41 s.insert(p,t); 42 cout << s << endl; 43 } 44 } 45 return 0; 46 }
总结:唉,这种题果然,用string类型超级爽啊超级爽,erase函数,insert函数,还是直接在后面+++,还是直接判断相等,真心爽啊爽,就是一定要注意头文件哦~
我本来想直接用switch的,结果c++的switch只支持整型。。。好吧,估计是和java记差了,还是老老实实用if吧。。。