strstr函数c语言库函数_C语言中的strstr函数

转自:http://www.cnblogs.com/xy-kidult/archive/2012/12/25/2832460.html

早上翻《C和指针》,碰见一个子串查找问题,这个问题在C标准库中有模板,即strstr函数,其原型是char*strstr(const char*s1,const char* s2);

这个函数的作用是在s1中查找子串s2,如果找到,则返回s1中s2的位置。否则返回NULL。

虽说函数库中存在解决方案,但还是想亲自动手实践一下。于是开始编程,思路很简单,分两步,第一,判断s2是不是空的,或者s2的长度是不是小于s1的长度;第二,在s1中遍历查找与s2第一个字符匹配的字母,如找到,则进行下一个字符匹配。如找不到,则返回空指针。

结果却都失败了。每次都碰见内存报错问题。仔细检查也没找到错误原因。

在网上百度了一个答案(见附录),才明白这其实涉及了一个字符匹配算法问题。而我的代码明显想简单了,所以没有成功。字符匹配算法中最常用的是KMP,这个算法说来话长,先挖个坑吧,以后有空再来好好研究它。

1 #include

2 #include

3

4 char * strrstr(char const *s1,char const *s2){

5 char *p2s1=(char*)s1;

6 char *p2s2=(char*)s2;

7

8 int i,j,m,n,k;

9 i=k=0;

10 j=0;

11 while(i

12 {

13 if(*(p2s1+i)==*(p2s2+j))

14 {

15 i++;

16 j++;

17 }

18 else

19 {

20 j=0;k++;

21 i=k;//可用于记录原来i的位置 ;

22

23

24 }

25 }

26

27 if(j>=strlen(s2))//判断找到字符串的条件

28 {

29 printf("找到字符串%s",s2);

30 return (p2s1+i);

31 }

32 else

33 {

34 printf("未找到字符串%s\n",s2);

35 return NULL;

36 }

37

38

39 }

40 int main()

41 {

42 char a[]="abcdefghijkl";

43 char b[]="fgi";

44

45 char* c;

46 c=strrstr(a,b);

47

48

49 return 0;

50

51

52 }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值