c语言的查找字符串函数strstr效率高吗?源码有谁知道的

 我来答
free逍遥星空
推荐于2016-09-15 · TA获得超过344个赞
知道小有建树答主
回答量:231
采纳率:100%
帮助的人:205万
展开全部
/*解决一般长度的可以。。因为使用了朴素的字符串匹配算法,所以效率不算高,KMP算法更好一些。
以下是源码:*/
/*strstr function*/
#include<string.h>

char *(strstr)(const char *s1, const char *s2)
{ /* find first occurrence of s2[] in s1[] */
if (*s2 == '\0')
return ((char*)s1);
for (; (s1 = strchr(s1, *s2)) != NULL; ++s1){/*match rest of prefix*/
const char *sc1, *sc2;

for (sc1 = s1, sc2 = s2;;)
if (*++sc2 == '\0')
return ((char *)s1);
else if (*++sc1 != *sc2)
break;
}
return (NULL);
}
/*strchr function*/
#include<string.h>

char *(strchr)(const char *s, int c)
{ /* find first occurrence of c in char s[] */
const char ch = c;

for (; *s != ch; ++s)
if (*s == '\0')
return (NULL);
return ((char*) s);
}
qzhao_1
2018-04-08 · TA获得超过2.4万个赞
知道大有可为答主
回答量:2.4万
采纳率:76%
帮助的人:4385万
展开全部
在现在的微机硬件条件下(CPU性能足够快、内存足够大),C语言、以及C++语言的在一个字符串中查找另一个子串(strstr)的函数的效率快慢,早就已经可以忽略不计了。源代码无法获得它。因为C语言的各种库函数,归根到底都是已经转化为了机器可执行的汇编语言指令的。
所以现在已经完全没有必要再去花费很多时间和精力在修改C编译器提供的各种库函数的实现上面了。而是如果真的对软件开发感兴趣、并立志作研发工作的话,那么学习计算机数据结构(堆栈、链表、树)、以及计算机算法(各种排序算法、以及各种搜索算法)、和各种数学模型的建立才是最最重要的,把它们真的学习精通、并掌握了,远比研究能够节省多少个字节的汇编语言指令要重要得多。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
mafangsan
2018-04-07 · TA获得超过1.2万个赞
知道大有可为答主
回答量:1万
采纳率:71%
帮助的人:2581万
展开全部

库函数的效率肯定比你自己写高效。

源码没读过,找子串有个优秀的算法叫KMP算法。

下面是有人写的比较。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
荐好就收
2018-04-08 · 超过29用户采纳过TA的回答
知道答主
回答量:114
采纳率:88%
帮助的人:25.9万
展开全部
一般情况下,strstr的表现是要比KMP优秀。你可以百度下strstr和kmp。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式