既然知道如何实现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://www.rowleydownload.co.uk/maxq30/documentation/index.htm?http://www.rowleydownload.co.uk/maxq30/documentation/strcasestr.htm

http://123.125.115.53/view/1081139.html?fromTaglist