给定一个文本字符串 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 19:42:39 浏览: 63
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 1010
#define MAX_TEMPLATE_NUM 10
#define TEMPLATE_LEN 1010
int main() {
char s[MAX_LEN + 1];
int m;
char template[MAX_TEMPLATE_NUM][TEMPLATE_LEN + 1];
// 读入字符串 s 和模板数量 m
gets(s);
scanf("%d", &m);
getchar(); // 读掉换行符
// 读入模板字符串
for (int i = 0; i < m; i++) {
gets(template[i]);
}
// 遍历字符串 s
int len = strlen(s);
for (int i = 0; i < len; ) {
if (s[i] == '{') {
// 如果找到了模板的起始符 '{',则匹配模板编号
int j = i + 1;
int template_index = -1;
while (j < len && s[j] >= '0' && s[j] <= '9') {
// 解析模板编号
if (template_index == -1) {
template_index = s[j] - '0';
} else {
template_index = template_index * 10 + (s[j] - '0');
}
j++;
}
if (template_index >= 0 && template_index < m && s[j] == '}') {
// 如果模板编号有效,并且找到了模板的结束符 '}'
// 则将 s 的当前位置 i 到 j 替换为模板字符串
printf("%s", template[template_index]);
i = j + 1;
} else {
// 否则跳过当前字符
printf("%c", s[i]);
i++;
}
} else {
// 如果不是模板起始符,则直接输出当前字符
printf("%c", s[i]);
i++;
}
}
return 0;
}
```
阅读全文