4.字符串处理
问题描述
有以下三种操作。
(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
c++版 :博主葡萄家
#include<iostream>
#include <cstring>
#define N 1000
using namespace std;
int main (){
int l,r,m,p,i;
char s[N];
char t[N];
char temp[N];
char op[15];
int len1,len2;
while(cin>>s){
strcpy(t,"jkl");
cin>>m;
while(m--){
cin>>op;
if(0==strcmp(op,"COPY")){//COPY 操作
cin>>l>>r;
for(i=l;i<=r;i++){
temp[i-l]=s[i];
}
temp[r-l+1]='\0';
strcpy(t,temp);
cout<<s<<endl;
//cout<<t<<endl;
}
else if(0==strcmp(op,"CUT")){//CUT操作,学习该方法的使用,如何复制合并数组
cin>>l>>r;
for(i=l;i<=r;i++){
temp[i-l]=s[i];
}
temp[r-l+1]='\0';
strcpy(t,temp);
//cout<<t<<endl;
strcpy(temp,"");
len1=strlen(s);
len2=r-l+1;
for(i=0;i<l;i++){
temp[i]=s[i];
}
for(i=l;i<len1-len2;i++){
temp[i]=s[len2+i];
}
temp[i]='\0';
strcpy(s,temp);
cout<<s<<endl;
} else{
cin>>p;
len1=strlen(s);
len2=strlen(t);
for(i=0;i<=p;i++){
temp[i]=s[i];
}
for(i=p+1;i<=p+len2;i++){
temp[i]=t[i-p-1];
}
for(i=p+len2+1;i<len1+len2;i++){
temp[i]=s[i-len2];
}
temp[i]='\0';
strcpy(s,temp);
cout<<s<<endl;
//cout<<t<<endl;
}
}
}
}
C语言版:
#include<stdio.h>
#include<string.h>
#define N 1000
int main (){
int l,r,m,p,i;
char s[N];
char t[N];
char temp[N];
char op[15];
int len1,len2;
while(scanf("%s",s)!=EOF){
strcpy(t,"jkl");
scanf("%d",&m);
while(m--){
scanf("%s",op);
if(0==strcmp(op,"COPY")){//COPY 操作
scanf("%d%d",&l,&r);
for(i=l;i<=r;i++){
temp[i-l]=s[i];
}
temp[r-l+1]='\0';
strcpy(t,temp);
printf("%s\n",s);
//cout<<t<<endl;
}
else if(0==strcmp(op,"CUT")){//CUT操作,学习该方法的使用,如何复制合并数组
scanf("%d%d",&l,&r);
for(i=l;i<=r;i++){
temp[i-l]=s[i];
}
temp[r-l+1]='\0';
strcpy(t,temp);
//cout<<t<<endl;
strcpy(temp,"");
len1=strlen(s);
len2=r-l+1;
for(i=0;i<l;i++){
temp[i]=s[i];
}
for(i=l;i<len1-len2;i++){
temp[i]=s[len2+i];
}
temp[i]='\0';
strcpy(s,temp);
printf("%s\n",s);
} else{
scanf("%d",&p);
len1=strlen(s);
len2=strlen(t);
for(i=0;i<=p;i++){
temp[i]=s[i];
}
for(i=p+1;i<=p+len2;i++){
temp[i]=t[i-p-1];
}
for(i=p+len2+1;i<len1+len2;i++){
temp[i]=s[i-len2];
}
temp[i]='\0';
strcpy(s,temp);
printf("%s\n",s);
//cout<<t<<endl;
}
}
}
}