既然知道如何实现strstr函数,那么实现strcasestr就简单了。之前想法是以为在之前基础上附近条件就OK了,如
while(*s1 && *s2 && (*s1 == *s2 || *s1 -*s2 ==32 || *s1 - *s2 == -32))
但仔细一想不对,*s1为大写字母A,而*s刚好为33时,也可以,经测试确实如此。后面看了参考才知道用到系统函数int tolower(int a),其功能是:将字母转换成小写,非字母字符则保持不变。
系统strcasestr函数声明:
char *strcasestr(const char *s1, const char *s2);
作用:与strstr功能一致,区别是strcasestr将大小写字符都用小写字符来匹配。即不区分大小写字母来匹配查找。
测试代码:
#include<stdio.h> #include<string.h> char * mystrcasestr(const char * ,const char *); char * mystrcasestr(const char * src,const char * find){ if(NULL == src || NULL == find) return NULL; char * cp = (char *) src; char * s1 , * s2; while(*cp){ s1 = cp; s2 = (char * )find; while(*s2 && *s1 && !(tolower(*s1) - tolower(*s2))) s1++,s2++; if(!(*s2)) return cp; cp++; } return NULL; } int main(){ char * src = "HeLlO, china and hello,world"; char * find = "hElLo,"; char * re = mystrcasestr(src,find); if(re) printf("%s\n",re); else printf("no find\n"); return 0; }
参考资料:
http://www.jbox.dk/sanos/source/lib/string.c.html
http://123.125.115.53/view/1081139.html?fromTaglist