关闭

linux下strncasecmp的实现

618人阅读 评论(2) 收藏 举报
分类:

linux下不区分大小写的字符串比较函数原型:
int strncasecmp(const char *s1, const char *s2, register size_t n);
返回值:如果相等返回0
    如果s1>s2,返回正整数
    如果s1<s2,返回负整数

static const unsigned char charmap[] = 
{
        '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007',
        '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017',
        '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',
        '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',
        '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047',
        '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057',
        '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067',
        '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077',
        '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
        '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
        '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
        '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137',
        '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
        '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
        '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
        '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177',
        '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
        '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',
        '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',
        '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',
        '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247',
        '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257',
        '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267',
        '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277',
        '\300', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
        '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
        '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
        '\370', '\371', '\372', '\333', '\334', '\335', '\336', '\337',
        '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
        '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
        '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
        '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377',
};
int strncasecmp(const char *s1, const char *s2, register size_t n)
{
    register unsigned char u1, u2;
    for (; n != 0; --n) 
    {
        u1 = (unsigned char) *s1++;
        u2 = (unsigned char) *s2++;
        if (charmap[u1] != charmap[u2]) 
        {
            return charmap[u1] - charmap[u2];
        }
        if (u1 == '\0') 
        {
            return 0;
        }
    }
    return 0;
}

这里的charmap数组下标是对应了ASCII的十进制值,数组值则对应了ASCII的八进制值,同时只要注意到从\141开始会有重复,没错,就是A-Z去重复a-z的八进制值。这样就可以忽略大小写进行比较了。这个代码的实现是取自linux的strncasecmp.c文件。

0
0
查看评论

strncasecmp与strcasecmp用法

strcasecmp  strcasecmp(忽略大小写比较字符串)   相关函数 bcmp,memcmp,strcmp,strcoll,strncmp  表头文件 #include  定义函数 int strcasecmp (const char *s1, const char *s2);  函数...
  • ACb0y
  • ACb0y
  • 2010-02-28 10:45
  • 17616

strcasecmp 函数 与 strncasecmp函数的介绍

这两类函数都是拿来比较字符串的,与Strcmp函数式不同的,因为Strcmp函数会比较大小写,而这两个函数是不区分大小写的。     首先介绍下 strcasecmp 函数:  strcasecmp 相关函数 bcmp,memcmp,strcmp,strcol...
  • u011471397
  • u011471397
  • 2013-07-29 10:40
  • 2217

strcasecmp,strncasecmp函数实现——strings.h库函数

信息来自RHEL,man page:STRCASECMP(3) Linux Programmer's Manual STRCASECMP(3)NAME ...
  • Riyadh_linux
  • Riyadh_linux
  • 2015-12-01 01:35
  • 1800

[字符串]strncasecmp() -- 比较字符串的前n个字符

http://www.groad.net/bbs/read.php?tid-1723.html 函数原型: 引用 #include int strncasecmp(const char *s1, const char *s2, size_t
  • zhangfn2011
  • zhangfn2011
  • 2011-09-10 10:46
  • 2448

字符串比较函数strncasecmp():比较字符串的前n个字符|字符串查找函数strstr和string.find() 查找字符串str1中是否存在与str2一样的子字符串

C语言strncasecmp()函数:比较字符串的前n个字符 头文件:#include 定义函数:int strncasecmp(const char *s1, const char *s2, size_t n); 函数说明:strncasecmp()用来比较参数s1 和s2 字符串前n个字...
  • haiross
  • haiross
  • 2015-05-15 11:25
  • 4332

int strncasecmp(const char *s1, const char *s2, size_t n)的实现

函数定义:int strncasecmp(const char *s1, const char *s2, size_t n); 函数说明:strncasecmp()用来比较参数s1 和s2 字符串前n个字符,比较时会自动忽略大小写的差异。 返回值:若参数s1 和s2 字符串相同则返回0。s1 若大于...
  • chenzrcd
  • chenzrcd
  • 2017-03-13 09:25
  • 278

strncasecmp

strncasecmp  相关函数:bcmp, memcmp, strcmp, strcoll, strncmp  表头文件:#include   函数定义:int strncasecmp(const char *s1, const char *s2, size_t n)  函数说明:strncas...
  • zhaohui73723871000
  • zhaohui73723871000
  • 2010-04-20 22:16
  • 73

字符串比较--strcasecmp()和strncasecmp()

函数说明 strcasecmp()用来比较参数s1和s2字符串,比较时会自动忽略大小写的差异。 返回值    若参数s1和s2字符串相同则返回0。s1长度大于s2长度则返回大于0 的值,s1 长度若小于s2 长度则返回小于0的值.   [cpp] vie...
  • yusiguyuan
  • yusiguyuan
  • 2014-01-16 11:53
  • 4101

不区分大小写的串比较---Windows下的stricmp和Linux下的strcasecmp, 遇到了, 所以记录一下!

不区分大小写的串比较, 在实战中的应用还是很广泛的, 有时候可以增强程序的容错性, 下面我们来分别看看Windows下的stricmp和Linux下的strcasecmp             Windows下的stricmp:...
  • stpeace
  • stpeace
  • 2015-04-02 22:10
  • 4330

linux和windows下不区分大小写的字符串比较

在写一个判断POST和GET时用到不区分大小写的字符串比较。 头文件都是string. h windows平台: 函数:stricmp(char *str1, char *str2), strnicmp(char *str1, char *str2, size_t n). Linu...
  • naturebe
  • naturebe
  • 2012-04-08 12:41
  • 5980