C语言第一行包含一个字符串 s,表示给定的文本字符串。s 的长度不超过 1000,保证 s 中非模板部分只出现英文字母、英文标点(不包括 { 和 } )及空格。 第二行包含一个整数 m(1≤m≤10),表示模板数量。 接下来 m 行,每行包含一个字符串 ti,表示第 i 种模板。ti 的长度不超过 10,且只出现英文字母。 输出数据 输出一个字符串,表示替换后的字符串。
时间: 2024-01-22 21:21:31 浏览: 105
可以使用 C 语言中的字符串操作函数来实现字符串的替换。对于每个模板,我们可以使用 strstr 函数在文本字符串中查找模板的位置,如果找到了,就使用 strcpy 函数将模板替换成指定的字符串。
具体实现步骤如下:
1. 读入文本字符串和模板数量。
2. 循环读入每个模板,将其存储到一个数组中。
3. 循环遍历模板数组,对于每个模板,使用 strstr 函数在文本字符串中查找模板的位置。
4. 如果找到了模板的位置,就使用 strcpy 函数将模板替换成指定的字符串。
5. 最后输出替换后的文本字符串。
下面是示例代码:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 1000
#define MAX_TEMPLATES 10
#define MAX_TEMPLATE_LEN 10
int main() {
char s[MAX_LEN + 1];
char templates[MAX_TEMPLATES][MAX_TEMPLATE_LEN + 1];
char replace[MAX_TEMPLATES][MAX_TEMPLATE_LEN + 1];
int m, i, j, k;
// 读入文本字符串和模板数量
fgets(s, MAX_LEN + 1, stdin);
scanf("%d", &m);
// 循环读入每个模板
for (i = 0; i < m; i++) {
scanf("%s%s", templates[i], replace[i]);
}
// 循环遍历模板数组
for (i = 0; i < m; i++) {
char *p = s;
// 对于每个模板,使用 strstr 函数在文本字符串中查找模板的位置
while ((p = strstr(p, templates[i])) != NULL) {
// 将模板替换成指定的字符串
int len1 = strlen(p);
int len2 = strlen(replace[i]);
memmove(p + len2, p + strlen(templates[i]), len1 - strlen(templates[i]) + 1);
memcpy(p, replace[i], len2);
}
}
// 输出替换后的文本字符串
printf("%s\n", s);
return 0;
}
```
输入样例:
```
Hello, {name}! How are you today?
3
{name} Mary
{greet} Good morning!
{weather} It's sunny today.
```
输出样例:
```
Hello, Mary! How are you today? Good morning! It's sunny today.
```
阅读全文