C语言写程序给定一个文本字符串 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 的长度不超过 10 ,且只出现英文字母。
时间: 2023-11-28 19:51:16 浏览: 82
下面是使用 C 语言实现的代码:
```c
#include <stdio.h>
#include <string.h>
int main()
{
char s[1001], t[10][11];
int m, i, j, k, len, t_len[10];
scanf("%[^\n]%*c", s); // 读取 s,注意要排除换行符
scanf("%d", &m); // 读取 m
getchar(); // 读取换行符
for (i = 0; i < m; i++)
{
scanf("%[^\n]%*c", t[i]); // 读取 ti
t_len[i] = strlen(t[i]);
}
len = strlen(s);
for (i = 0; i < len; )
{
if (s[i] == '{') // 如果找到了 {i}
{
j = i + 1;
while (s[j] != '}')
j++;
if (j - i == 3 && s[i+1] >= '0' && s[i+1] <= '9') // 如果 {i} 的格式正确
{
k = s[i+1] - '0'; // 获取 i 的值
if (k >= 0 && k < m) // 如果 i 的值在合法范围内
{
memmove(s+i, s+j+1, len-j); // 将 {i} 替换成 ti
memmove(s+i+t_len[k], s+i, len-j);
memcpy(s+i, t[k], t_len[k]);
len = len - (j-i) + t_len[k];
i += t_len[k];
}
else
i = j + 1; // 如果 i 的值不合法,则直接跳过 {i}
}
else
i = j + 1; // 如果 {i} 的格式不正确,则直接跳过 {i}
}
else
i++; // 如果不是 {i},则继续向后遍历
}
printf("%s", s); // 输出替换后的字符串
return 0;
}
```
代码的思路是先读入 s 和 m,然后依次读入 ti,并计算出每个 ti 的长度。接着遍历 s,如果找到了 {i},则获取 i 的值并进行替换,否则继续向后遍历。最后输出替换后的 s。
阅读全文