C语言标准函数库中包括 strstr 函数,在主串中查找子串。编写一个功能与之相同的函数。说明:txt 和 pat 分别为主串和子串的起始地址。若查找成功,则函数值为子串在主串中首次出现的起始地址,否则函数值为NULL。 特别地,我们对C语言库函数strstr进行适当修改:若子串为空串,则没有意义,函数值规定为NULL。
时间: 2024-02-15 22:06:17 浏览: 106
实现库函数strstr查找子串.zip
好的,我理解了你的问题。根据你的要求,我编写了一个函数,实现与 C 语言标准函数库中的 strstr 函数相同的功能。以下是代码实现:
```c
#include <stdio.h>
char *my_strstr(const char *txt, const char *pat)
{
if (*pat == '\0') {
return NULL;
}
while (*txt != '\0') {
const char *t = txt;
const char *p = pat;
while (*p != '\0' && *p == *t) {
++p;
++t;
}
if (*p == '\0') {
return (char *)txt;
}
++txt;
}
return NULL;
}
int main()
{
char txt[] = "Hello, World!";
char pat[] = "World";
char *res = my_strstr(txt, pat);
if (res != NULL) {
printf("Substring found at index %ld\n", res - txt);
} else {
printf("Substring not found\n");
}
return 0;
}
```
在上面的代码中,我们定义了一个名为 `my_strstr` 的函数,它接受两个参数 `txt` 和 `pat`,分别表示主串和子串的起始地址。如果子串为空串,则函数返回 `NULL`,否则函数会在主串中查找子串。如果查找成功,函数会返回子串在主串中首次出现的起始地址,否则函数返回 `NULL`。
在 `my_strstr` 函数的实现中,我们首先检查子串是否为空串。如果是,直接返回 `NULL`。否则,我们使用两个指针 `t` 和 `p` 分别指向主串和子串的当前字符。然后,我们在主串中逐个比较字符,直到找到子串或者主串被查找完毕。如果找到子串,返回子串在主串中的位置,否则返回 `NULL`。
在上面的示例程序中,我们使用 `my_strstr` 函数在主串中查找子串,并输出查找结果。可以看到,程序输出了子串在主串中首次出现的位置。
阅读全文