c语言编程。题目内容:.指定位置输出字符串:输入一个字符串后再输入两个字符,输出此字符串中从与第 1 个字符匹配的位置开始到与第 2 个字符匹配的位置结束的所有字符。例如,输入字符串“program”与 2 个字符’r’和’g’后,输出”rog”。要求自定义函数 char *match(char *s, char ch1, char ch2)返回结果字符串的首地址。试编写相应程序。
时间: 2023-12-10 15:39:42 浏览: 133
以下是一种可能的解法:
```c
#include <stdio.h>
#include <string.h>
char *match(char *s, char ch1, char ch2);
int main()
{
char str[100], ch1, ch2;
printf("请输入字符串:");
scanf("%s", str);
printf("请输入两个字符:");
scanf(" %c %c", &ch1, &ch2); // 注意需要在前面加一个空格,避免读入回车符
char *result = match(str, ch1, ch2);
printf("结果为:%s\n", result);
return 0;
}
char *match(char *s, char ch1, char ch2)
{
int len = strlen(s);
char *result = NULL;
int start = -1, end = -1;
for (int i = 0; i < len; i++)
{
if (s[i] == ch1 && start < 0) // 找到第一个字符
{
start = i;
}
if (s[i] == ch2 && start >= 0) // 找到第二个字符
{
end = i;
break;
}
}
if (start >= 0 && end >= 0)
{
result = (char *)malloc((end - start + 2) * sizeof(char)); // 分配内存
strncpy(result, s + start, end - start + 1); // 复制字符串
result[end - start + 1] = '\0'; // 添加结尾符
}
return result;
}
```
代码解释:
1. `match` 函数接受一个字符串 `s` 和两个字符 `ch1` 和 `ch2`,返回一个新分配的字符串,该字符串是从 `s` 中匹配 `ch1` 和 `ch2` 之间的部分。
2. `main` 函数首先读入一个字符串 `str`,然后读入两个字符 `ch1` 和 `ch2`。
3. 调用 `match` 函数得到结果字符串,并输出。需要注意的是,如果返回值为 `NULL`,说明没有找到匹配的字符,此时不能直接输出 `result`,否则会出现错误。
4. 在 `match` 函数中,首先计算字符串长度 `len`,然后定义两个变量 `start` 和 `end`,分别表示匹配到的第一个字符和第二个字符在字符串中的位置。初始化它们为 -1,表示尚未找到。
5. 使用 `for` 循环遍历字符串 `s`,如果找到 `ch1`,并且 `start` 还没有被设置,则将 `start` 设置为当前位置。如果找到 `ch2`,并且 `start` 已经被设置,则将 `end` 设置为当前位置,并且跳出循环。
6. 如果 `start` 和 `end` 都不是 -1,则说明找到了匹配的字符,可以开始复制字符串。首先使用 `malloc` 函数分配一段内存,这里分配的大小为 `end - start + 2`,其中加 2 是因为要为字符串添加结尾符。然后使用 `strncpy` 函数将匹配的字符串复制到新分配的内存中。最后,添加结尾符,返回结果字符串。
7. 如果 `start` 和 `end` 中有一个是 -1,则说明没有找到匹配的字符,此时返回 `NULL`。
阅读全文