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

如题所述

/*解决一般长度的可以。。因为使用了朴素的字符串匹配算法,所以效率不算高,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);
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-04-08
在现在的微机硬件条件下(CPU性能足够快、内存足够大),C语言、以及C++语言的在一个字符串中查找另一个子串(strstr)的函数的效率快慢,早就已经可以忽略不计了。源代码无法获得它。因为C语言的各种库函数,归根到底都是已经转化为了机器可执行的汇编语言指令的。
所以现在已经完全没有必要再去花费很多时间和精力在修改C编译器提供的各种库函数的实现上面了。而是如果真的对软件开发感兴趣、并立志作研发工作的话,那么学习计算机数据结构(堆栈、链表、树)、以及计算机算法(各种排序算法、以及各种搜索算法)、和各种数学模型的建立才是最最重要的,把它们真的学习精通、并掌握了,远比研究能够节省多少个字节的汇编语言指令要重要得多。
第2个回答  2018-04-07

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

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

下面是有人写的比较。

第3个回答  2018-04-08
一般情况下,strstr的表现是要比KMP优秀。你可以百度下strstr和kmp。
相似回答