C语言中的strstr函数是用来查找一个字符串中是否包含另一个字符串的函数,其原型定义如下:
char *strstr(const char *haystack, const char *needle);
其中,haystack表示要查找的字符串,needle表示要搜索的子字符串。该函数返回子字符串在要查找的字符串中第一次出现的位置的指针,如果没有找到,则返回NULL。
以下是模拟实现strstr函数的示例代码:
char *my_strstr(const char *str1, const char *str2)
{
const char *s1 = str1;
const char *s2 = str2;
if (!(*str2)) return (char *) str1;
while (*s1)
{
if (!(*s2))
return (char *) str1;
if (*s1 == *s2)
s2++;
else
{
s1 -= s2 - str2;
s2 = str2;
}
s1++;
}
return (char *) NULL;
}
在该代码中,首先定义了两个指针s1和s2,分别指向要查找的字符串str1和要搜索的子字符串str2的起始位置。然后,如果子字符串str2为空,就直接返回字符串str1。接着,使用while循环逐个比较字符串s1和s2的字符是否相等,如果相等,就将指针s2向后移动一位,否则将指针s1向后移动到上次比较开始的下一个位置,同时将指针s2重新指向子字符串的起始位置。
下面通过两个示例说明如何使用上述代码模拟实现strstr函数。
第一个示例:
#include <stdio.h>
int main(void)
{
char str1[20] = "Hello world";
char str2[10] = "world";
char *result = my_strstr(str1, str2);
if (result == NULL)
printf("Not found\n");
else
printf("Found at %d\n", result - str1 + 1);
return 0;
}
在上述示例中,定义了一个包含字符串"Hello world"的字符数组str1和一个包含字符串"world"的字符数组str2,然后调用my_strstr函数查找str2在str1中的位置,最后打印出找到的位置。
第二个示例:
#include <stdio.h>
int main(void)
{
char str1[20] = "Hello world";
char str2[10] = "abc";
char *result = my_strstr(str1, str2);
if (result == NULL)
printf("Not found\n");
else
printf("Found at %d\n", result - str1 + 1);
return 0;
}
在上述示例中,仍然定义了一个包含字符串"Hello world"的字符数组str1,但是定义的字符数组str2中包含了一个不存在于str1中的子字符串"abc",因此调用my_strstr函数返回NULL,并打印出"Not found"。
通过以上两个示例,可以看到模拟实现strstr函数的代码能够正确地识别要搜索的子字符串是否存在于要查找的字符串中,并返回正确的位置。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言模拟实现strstr函数的示例代码 - Python技术站