给定一个文本字符串 s和 m个模板,每个模板用 {i}(0≤i≤9)表示,对应一个字符串 ti,请将 s中的所有形如 {i} 的字符串替换为 ti,如果 s中包含多个 {i},则所有的 {i}均需要被替换成 ti。输入第一行包含一个字符串 s,表示给定的文本字符串。s的长度不超过 1000,保证 s中非模板部分只出现英文字母、英文标点(不包括 { 和 } )及空格。 第二行包含一个整数 m(1≤m≤10),表示模板数量。 接下来 m行,每行包含一个字符串 ti,表示第 i种模板。ti的长度不超过 1010,且只出现英文字母。输出一个字符串,表示替换后的字符串。用C语言
时间: 2023-12-03 14:42:38 浏览: 44
```c
#include <stdio.h>
#include <string.h>
int main() {
char s[1001];
char t[11][1011];
fgets(s, 1001, stdin);
int m;
scanf("%d", &m);
getchar(); // 把回车符读掉
for (int i = 0; i < m; i++) {
fgets(t[i], 1011, stdin);
t[i][strlen(t[i])-1] = '\0'; // 把换行符替换成字符串结束符
}
for (int i = 0; i < 10; i++) {
char str[4]; // {i}的长度为3,再加上字符串结束符
sprintf(str, "{%d}", i); // 把{i}转换成字符串形式
for (int j = 0; j < strlen(s);) {
if (strncmp(str, s+j, 3) == 0) { // 判断是否匹配到了{i}
int k;
for (k = 0; k < m; k++) {
if (strncmp(str+1, t[k], strlen(t[k])) == 0) { // 判断是否有对应的模板
break;
}
}
if (k < m) { // 找到了对应的模板
memmove(s+j+strlen(t[k]), s+j+3, strlen(s)-j-2); // 把{s[i]}替换成ti
memcpy(s+j, t[k], strlen(t[k])); // 把ti复制到{s[i]}的位置
j += strlen(t[k]); // 跳过已经替换的部分
} else { // 没有找到对应的模板
j += 3; // 跳过{s[i]}
}
} else { // 没有匹配到{i}
j++;
}
}
}
printf("%s", s);
return 0;
}
```