strstr函数源码问题

we_sky2008 2010-06-06 01:40:37
网上搜的源码如下:

char * strstr (register char *buf, register char *sub)
{
register char *bp;
register char *sp;
if (!*sub)
return buf;
while (*buf)
{
bp = buf;
sp = sub;
do
{
if (!*sp)
return buf;
} while (*bp++ == *sp++);
buf += 1; //若没有从上面的循环体内返回 此处为何还是只前进一步? 这样的话效率就低了吧?
}
return 0;
}


举个例子:
若:

char buf[] = "111123411111234";
char sub = "11111";

则在查找"11111"的时候会:
1:
11112
11111

2:
1112
1111

3:
112
111

4:
12
11

第2, 3 ,4三步操作就是多余了吧?
本来可以直接跳过第2,3,4步的:
1:
11112
11111

2:
23411111234
11111



谢谢大家!
...全文
786 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
we_sky2008 2010-06-06
  • 打赏
  • 举报
回复
好了
结贴了
we_sky2008 2010-06-06
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 darkiss123 的回复:]
同意10楼的举手
[/Quote]
呵呵
we_sky2008 2010-06-06
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 tananade 的回复:]
引用 7 楼 we_sky2008 的回复:
引用 5 楼 z569362161 的回复:
明白了吗?

呵呵
用法我是知道的


如果是111123456
要匹配1112呢?
[/Quote]

这时确实会有问题
谢谢了
huanmie_09 2010-06-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 liao05050075 的回复:]

说得没错,是可以跳过。具体你可以看一下kmp算法。
而在一般的应用里,像这样的暴力匹配就够用了。。
[/Quote]
up!
  • 打赏
  • 举报
回复
同意10楼的举手
tananade 2010-06-06
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 we_sky2008 的回复:]
引用 5 楼 z569362161 的回复:
明白了吗?

呵呵
用法我是知道的
[/Quote]

如果是111123456
要匹配1112呢?
we_sky2008 2010-06-06
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 tianya0609 的回复:]
还有, 源代码来源?
[/Quote]
网上搜的
we_sky2008 2010-06-06
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 tianya0609 的回复:]
可能为了通用性吧,KMP和BM算法都是上面的改进啊。BM算法比较容易理解。
[/Quote]
呵呵,
KMP和BM是什么意思?
谢谢!
elegant87 2010-06-06
  • 打赏
  • 举报
回复
KMP 算法有些难度啊
tianya0609 2010-06-06
  • 打赏
  • 举报
回复
还有, 源代码来源?
  • 打赏
  • 举报
回复
是只能前进一步啊
如果测试字符串为:
char buf[] = "123456798";
char sub[] = "234";

we_sky2008 2010-06-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 liao05050075 的回复:]
说得没错,是可以跳过。具体你可以看一下kmp算法。
而在一般的应用里,像这样的暴力匹配就够用了。。
[/Quote]
这个真的是源码吗?
我觉得C的源码的效率应该是很高的
这个就解决起来很简单的吗
为啥它没这么做呢?
难道就是为了简化结构?
tianya0609 2010-06-06
  • 打赏
  • 举报
回复
可能为了通用性吧,KMP和BM算法都是上面的改进啊。BM算法比较容易理解。
we_sky2008 2010-06-06
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 z569362161 的回复:]
明白了吗?
[/Quote]
呵呵
用法我是知道的
liutengfeigo 2010-06-06
  • 打赏
  • 举报
回复
对~
liao05050075 2010-06-06
  • 打赏
  • 举报
回复
说得没错,是可以跳过。具体你可以看一下kmp算法。
而在一般的应用里,像这样的暴力匹配就够用了。。
z569362161 2010-06-06
  • 打赏
  • 举报
回复
明白了吗?
z569362161 2010-06-06
  • 打赏
  • 举报
回复
功 能: 在串中查找指定字符串的第一次出现
tananade 2010-06-06
  • 打赏
  • 举报
回复
帮顶~~~
z569362161 2010-06-06
  • 打赏
  • 举报
回复
功  能: 在串中查找指定字符串的第一次出现  

用 法: char *strstr(char *str1, char *str2);

程序例:



#include <stdio.h>

#include <string.h>



int main(void)

{

char *str1 = "Borland International", *str2 = "nation", *ptr;



ptr = strstr(str1, str2);

printf("The substring is: %s\n", ptr);

return 0;

}

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧