目录
1、strstr函数的使用
1.1、函数的参数及返回类型
1.2、直接使用函数strstr
2、模拟实现strstr函数
2.1、暴力查找
2.2、KMP算法
正文
1、strstr函数的使用
1.1、函数的参数及返回类型
1.2、直接使用函数strstr
strstr函数是用来进行字符串的查找。即在字符串str1中查找字符串str2,并返回在str1中第一次遇到str2时的地址。 打印该地址之后的字符串,直到遇到'\0'。
如下图演示:
2、模拟实现strstr函数
2.1、暴力查找
说明:将两个字符串中的字符进行一一比较,找到要查找的字符串。
假设要字符串arr1中查找字符串arr2
begin是需要返回的地址,从begin开始向后找,是arr2在 arr1中第一次出现
赋给指针begin的起始地址为 str1, 使得指针s1从begin开始移动,同时使得s2从str2开始移动,将s1指向的内容与s2指向的内容进行比较, 如果s1 不等于 s2, 则使begin++,s1从begin指向的位置开始向后移动,而s2返回起始位置(str2)开始移动,继续进行一一比较。如下图
对应代码进行解释为
完整代码为:
#define _CRT_SECURE_NO_WARNINGS 1
//strstr函数:在一个字符串中查找另一个字符串
#include <stdio.h>
char* my_strstr(const char* str1, const char* str2)
{ //str1、str2为两字符串的首字符地址
char* begin = str1;//begin为s1进行移动的初始地址
char* s1;
char* s2; //s1为str1中进行移动的指针;s2为str2中进行移动的指针
if (*str2 == '\0')
return str1;
while (*begin)
{
s1 = begin;
s2 = str2;
while (*s1 != '\0' && *s2 != '\0' && *s1 == *s2)
{
s1++;
s2++;
}
if (*s2 == '\0')
{
return begin;
}
begin++;
}
return (NULL);
}
int main()
{
char str1[] = "abbbcdew";
char str2[] = "bbc";
char* ret = my_strstr(str1, str2);
if (ret == NULL)
printf("没找到\n");
else
printf("%s\n", ret);
return 0;
}
2.2、KMP算法
有这种算法,在一个字符串中找到另一个字符串,代码更高效。
但我目前还没学到,以后进行补充。