临睡之际,看到一篇文章介绍字符串子串匹配查询的问题,一时兴起,与各位分享一下心得。
就目前公认做好的查询匹配字符串的方法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;
}
小结:路漫漫其修远兮,吾将还差老远矣。
关灯,睡觉!