字符串判断子串存在性

临睡之际,看到一篇文章介绍字符串子串匹配查询的问题,一时兴起,与各位分享一下心得。

就目前公认做好的查询匹配字符串的方法KMP及其改进版。

但是这类方法都存在一个“致命”的问题--阅读费劲,不知道原理的大有人在(自我安慰~)。

因此写作本文的目的不是要介绍其实现原理,而是选择一个大家都能理解的方式来实现。

因此本文的要义在于实现,而非算法。

例如:查找wo we would be the last , wow, it's great! 中的出现的所有位置(以首字母所在的下标为例)

我的代码:

void stringindex(char *source,char *searchfor){
    int index=0;
    char *i,*p,*q;
    i=source;
    while(i < srouce+strlen(source)-1){
        for(p=i,q=searchfor; q<searchfor+strlen(searchfor)-1; ){
	    if(*p==*q) p++,q++;
	    else q=searchfor;
	}
	if(*p==*q) printf("Found match Index: %d\n",index); 
	i++;
	index++;
    }
}
这是我的理解写出的,对比一下牛人的做法,发现自己的编程能力简直弱爆了。

牛人艺术:

int stringindex(char *source,char *searchfor){ 
    int i, j, k; 
    for (i = 0; source[i] != '\0'; i++) { 
    	for (j=i, k=0; searchfor[k]!='\0' && source[j]==searchfor[k]; j++, k++); 
	if (k > 0 && searchfor[k] == '\0') return i; 
    }
    return -1; 
}


小结:路漫漫其修远兮,吾将还差老远矣。

关灯,睡觉!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值