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



谢谢大家!
...全文
838 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;

}

内容概要:本文针对无刷直流电机驱动的电子机械制动(EMB)执行器,建立了考虑Stribeck摩擦特性的非线性耦合动力学模型,并在Simulink环境中完成了系统级仿真分析。研究综合集成了电机动力学、齿轮传动机构与制动执行机构的动力学特性,构建了高保真的机电一体化系统模型。重点引入Stribeck摩擦模型以精确描述低速工况下执行器内部存在的静摩擦、粘滞摩擦与库仑摩擦之间的过渡行为,有效提升了系统在启停、反向运动等瞬态过程中的动态响应仿真精度。通过多工况仿真验证了模型的有效性,能够准确反映摩擦引起的爬行、滞后与定位误差等非线性现象,为EMB系统的高性能控制算法设计(如摩擦补偿、滑模控制)与结构优化提供了高可信度的仿真平台。; 适合人群:从事汽车电子制动系统、电机驱动控制、机电系统建模与仿真研究的研究生、科研人员及工程技术人员,需具备扎实的机械动力学、自动控制理论基础和MATLAB/Simulink仿真能力。; 使用场景及目标:①用于高精度电子机械制动系统的设计验证与性能预测;②为消除摩擦非线性影响的先进控制策略(如自适应控制、智能控制)提供精确的被控对象模型;③深入探究Stribeck摩擦等非线性因素对系统动态性能(如响应延迟、稳态误差)的作用机理; 阅读建议:读者应结合提供的Simulink模型文件,深入剖析Stribeck摩擦模块的数学实现与参数辨识方法,建议通过改变输入指令(如阶跃、正弦)和负载条件进行对比仿真,以直观理解非线性摩擦对系统动态特性的影响。

70,038

社区成员

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

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