看来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文件。
新闻热点
疑难解答