首页 > 学院 > 开发设计 > 正文

linux下strncasecmp的实现

2019-11-06 06:36:17
字体:
来源:转载
供稿:网友

看来strcpy的实现确实是太low了,腾讯的笔试字符串知识点考察就变了。 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文件。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表