C语言:查找子串问题(strstr函数自己实现)
·
一、系统提供的函数:strstr
系统提供的查找子串为:strstr。:在字符串 haystack 中查找第一次出现字符串 needle 的位置,不包含终止符 ‘\0’。
函数声明:
char *strstr(const char *haystack, const char *needle)
参数:
haystack:要被检索的C字符串
needle:在haystack字符串内要搜索的小字符串
返回值:
成功:返回在 haystack 中第一次出现 needle 字符串的位置
失败:返回NULL
使用方法如下:我们对其直接调用。
#include <stdio.h>
#include <string.h>
int main()
{
const char haystack[20] = "RUNOOB";
const char needle[10] = "NOOB";
char *ret;
ret = (char*)strstr(haystack, needle);
printf("子字符串是:%s\n", ret);
return(0);
}
输出结果:查找成功。
二、自己实现strstr函数
问题探究: 我们需要查找一个子串,如下:
实现思路: 这里只是一个简单的思路,代码实现可以使用memcmp函数再优化。
代码实现:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int MyStrstr(char* str,char* substr)
{
int num = 0;
while (*str != '\0')
{
if (*str != *substr)
{
str++;
num++;
continue;
}
//创建临时指针
char* tmpstr = str;
char* tmpsubstr = substr;
while (*tmpsubstr != '\0')
{
if (*tmpstr != *tmpsubstr)
{
//匹配失败
str++;
num++;
break;
}
tmpstr++;
tmpsubstr++;
}
if (*tmpsubstr == '\0')//匹配成功
{
return num;
}
}
return -1;
}
void test()
{
char* str = "abclefglol";
int ret = MyStrstr(str,"lol");
if (ret == -1)
{
printf("查找失败!\n");
}
else
{
printf("查找成功!位置为:%d\n",ret);
}
}
int main()
{
test();
return 0;
}
运行结果:查找成功!
改为一个该串中没有的字符串:预期查找失败!
int ret = MyStrstr(str,"qwe");
运行结果:查找失败!
更多推荐
已为社区贡献4条内容
所有评论(0)