c++ 字符串查找函数

头文件:#include <string.h>

定义函数:int strcasecmp (const char *s1, const char *s2);

函数说明:strcasecmp()用来比较参数s1 和s2 字符串,比较时会自动忽略大小写的差异。

返回值:若参数s1 和s2 字符串相同则返回0。s1 长度大于s2 长度则返回大于0 的值,s1 长度若小于s2 长度则返回小于0 的值。
头文件:#include <string.h>

strncmp() 用来比较两个字符串的前n个字符,区分大小写,其原型为:
    int strncmp ( const char * str1, const char * str2, size_t n );

【参数】str1, str2 为需要比较的两个字符串,n为要比较的字符的数目。

字符串大小的比较是以ASCII 码表上的顺序来决定,此顺序亦为字符的值。strncmp()首先将s1 第一个字符值减去s2 第一个字符值,若差值为0 则再继续比较下个字符,直到字符结束标志'\0',若差值不为0,则将差值返回。例如字符串"Ac""ba"比较则会返回字符"A"(65)和'b'(98)的差值(-33)。

注意:要比较的字符包括字符串结束标志'\0',而且一旦遇到'\0'就结束比较,无论n是多少,不再继续比较后边的字符。
头文件:#include <string.h>

定义函数:int memcmp (const void *s1, const void *s2, size_t n);

函数说明:memcmp()用来比较s1 和s2 所指的内存区间前n 个字符。

字符串大小的比较是以ASCII 码表上的顺序来决定,次顺序亦为字符的值。memcmp()首先将s1 第一个字符值减去s2 第一个字符的值,若差为0 则再继续比较下个字符,若差值不为0 则将差值返回。例如,字符串"Ac""ba"比较则会返回字符'A'(65)和'b'(98)的差值(-33)。

返回值:若参数s1 和s2 所指的内存内容都完全相同则返回0 值。s1 若大于s2 则返回大于0 的值。s1 若小于s2 则返回小于0 的值。
忽略大小写的比较、查找: strcasecmp与strcasestr
        在C语言中(‍string.h)定义了用于进行忽略大小写的字符串比较的函数strcasecmp及strncasecmp,以及用于子串查找的函数strstr,不过很遗憾的是,C及C++中并未定义strstr的“忽略大小写版本”。
        以下是strstr的一种实现形式(注意,当s2是一个空串时,直接返回了s1,而非NULL):
const char* strstr( const char *s1, const char *s2 )   
{
    int len2;
    if ( !(len2 = strlen(s2)) )
        return s1;
    for (; *s1; ++s1)
    {
        if ( *s1 == *s2 && strncmp( s1, s2, len2 )==0 )//如果串中包含空格,考虑使用memcmp
        return s1;
    }
    return NULL;
} 

参考strstr实现,我写了一个它的忽略大小写的版本strcasestr: 
const char* strcasestr(const char* str, const char* subStr)
{
    int len = strlen(subStr);
    if(len == 0)
    {
        return NULL;          /* 这里我并未照strstr一样返回str,而是返回NULL
    }

    while(*str)
    {
        if(strncasecmp(str, subStr, len) == 0)       /* 这里使用了可限定比较长度的strncasecmp */
        {
            return str;
        }
        str++;
    }
    return NULL;
}

 http://baike.baidu.com/link?url=K32muTbO-oneGzlstp7NFWzj_Zzgkl56_BVAB1RgGxpkUw4tO1j57Ycz8FYVs0sgiEFS3cIyVFeHoFYK-cB-zK

posted on 2016-12-09 13:08  zyz913614263  阅读(1173)  评论(0编辑  收藏  举报

导航