XTUOJ-1299-String

  1. 题目

题目描述
一个字符串,有以下三种操作
操作
现在给你初始字符串和一个指令序列,请执行这个指令序列。
输入
包含不多于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

  1. 解法
    这道题照着题目意思写即可。我的代码如下。
#include 
#include 
#include 
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;
}

你可能感兴趣的:(XTUOJ)