返回

基于c语言的字符串匹配的实现及注意事项

发布时间:2023-04-24 20:59:03 370

在C语言中,库函数 char *strstr(const char *haystack, const char *needle) 包含于头文件string.h中。该函数用于查找在字符串 haystack 中第一次出现字符串 needle 的位置,不包含终止符 '\0'。该函数返回在 haystack 中第一次出现 needle 字符串的位置,如果未找到则返回 null。本文模拟实现字符串的匹配函数,在在目的字符串 dest 中查找第一次出现子串 substring 的位置,如果查找失败或子串为空则返回NULL,查找成功则返回目的字符串中子串首次出现的地址。

#include
#include
//const char* 定义的变量不可被修改,可以保证变量的安全性
char* str_Match(const char* dest, const char* substring)
{
char* s = substring;
char* d = dest;
char* p = dest;
//若子串为空串,则匹配失败,返回NULL
if (*s == '\0')
return NULL;
//若目的字符串没有达到结束标志,则将子串与目的字符串逐项进行匹配
while (*d != '\0')
{
if (*d == *s)
{
s++;
d++;
}
else
{
//若匹配失败,则目的字符串进入下一个地址,
//且子串回到起始地址,准备进行下次匹配。
d = ++p;
s = substring;
}
//若子串到达结束标志则匹配成功,跳出循环
if (*s == '\0')
break;
}
//匹配失败,返回NULL
if (*d == '\0' && *s != '\0')
return NULL;
//匹配成功,返回目的字符串中子串首次出现的地址
if (*s == '\0')
return p;
}
void main()
{
char arr1[] = "wengqiulin";
char arr2[] = "qiulin";
char ret = str_Match(arr1, arr2);
//对比结果两个函数的运行结果
if (ret == NULL)
printf("子串不存在\n");
else
printf("%s\n", str_Match(arr1, arr2));
if (ret == NULL)
printf("子串不存在\n");
else
printf("%s", strstr(arr1, arr2));
}

该算法时间复杂度为O(n),下图为函数两个函数的运行结果对比。

基于c语言的字符串匹配的实现及注意事项_#include


特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线
下一篇
c++ vector容器总结 2023-04-24 18:14:13