题目大意:根据给出的替换规则替换字符串,要按照规则顺序,整个字符串都找不到后才能进行下一个规则。
解题思路:查找规则子串,标记在字符串中的头尾位置,创建一个临时数组,将替换后的串放入临时数组,接上尾部以后的原串,然后再将这个临时数组接到原串中标记的规则串头部。即原串 = a < b > c,b 替换后为 d,创建 temp = d,接入 c,再将 temp = d + c 接入 a,即 a + d + c,组合使用 strcpy 和 strcat 的技巧。
一开始自己用 for 循环查找子串、连接、覆盖等等,提交后TLE
#include<iostream>
#include<cstdio>
#include<string.h>
using namespace std;
char rule[50][100];
char re[50][100];
char str[1000];
int main() {
int r;
while(scanf("%d", &r) != EOF) {
getchar();
if (r == 0) break;
for (int i = 0; i < r; i++){
gets(rule[i]);
gets(re[i]);
}
gets(str);
char *tag, *flag;
for (int i = 0; i < r; i++)
while (strstr(str, rule[i]) != NULL) {
char temp[1000];
tag = strstr(str, rule[i]);
flag = tag + strlen(rule[i]);
strcpy(temp, re[i]);
strcat(temp, flag);
strcpy(tag, temp);
}
puts(str);
}
return 0;
}