- 题目
题目描述
一个字符串,有以下三种操作
现在给你初始字符串和一个指令序列,请执行这个指令序列。
输入
包含不多于100个样例。 每个样例第一行是一个只含英文大写字母的字符串,长度不超过100。 以后是不超过100行的指令序列,如果指令为"END",表示指令序列的结束。
输出
依次执行指令,输出格式如"x:s"这样的结果,其中x为指令序号(从1开始),s为执行之后的字符串。 每个样例之后输出一个空行。
样例输入
AABBCC
S 2 4 C
T C D
END
AABBCC
T C D
S 2 4 C
END
样例输出
1:ACCCCC
2:ADDDDD
这里有一个空行
1:AABBDD
2:ACCCDD
- 解法
这道题照着题目意思写即可。我的代码如下。
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
//第一个命令
void schange(char s[], int start, int end, char dst) {
int length = strlen(s);
for(int i = start-1; i < end && i < length; i++) {
s[i] = dst;
}
}
//第二个命令
void tchange(char s[], char src, char dst) {
int length = strlen(s);
for(int i = 0; i < length; i++) {
if(s[i] == src) {
s[i] = dst;
}
}
}
int main(int argc, char const **argv) {
char s[105];
while(cin >> s) {
getchar();
char op, src, dsc, temp[2];
int start, end, cnt = 0;
scanf("%c", &op);
while(op != 'E') {
if(op == 'S') {
//%*c表示跳过一个char输入
scanf("%*c%d%*c%d%*c%c", &start, &end, &dsc);
getchar();
schange(s, start, end, dsc);
printf("%d:%s\n", ++cnt, s);
} else {
scanf("%*c%c%*c%c", &src, &dsc);
getchar();
tchange(s, src, dsc);
printf("%d:%s\n", ++cnt, s);
}
scanf("%c", &op);
}
scanf("%c%c", &temp[0], &temp[1]);
getchar();
printf("\n");
}
return 0;
}