在C中使用大写字母和小写字母对字符串排序
有没有办法按字母顺序对字符串数组进行排序,其中字符串既包含大写字母又包含小写字母?在C中使用大写字母和小写字母对字符串排序
由于大写字母的ASCII值较低,所以像strcmp这样的函数将始终显示它在小写字母之前。例如,可以说我们想排序“ABCD”,“ZZZZ”,“龟”,“JAVA”,“水”。
当使用像STRCMP功能将这些字符串进行排序,就变成:
ABCD JAVA ZZZZ 龟 水
当它应该是:
ABCD JAVA 龟 水 ZZZZ
与strcasecmp或strcoll一起使用qsort作为比较函数。
strcasecmp可能会更快,但strcoll更灵活,并使用程序语言环境,以便非ASCII字符串工作。
试试strcoll(3)
。
如何使用呢?从我的理解,它调用strcmp,除非有一个区域设置...但我不知道区域是什么。 – DemonicImpact 2010-09-16 18:24:56
strcoll工程案例类似于strcmp,不是针对您的问题的解决方案 – user411313 2010-09-16 18:47:29
@ user411313,取决于您设置的区域设置。 – 2010-09-16 21:01:14
在严格C89简单的自己的解决方案应该有所帮助:
#include <ctype.h>
#include <string.h>
int strcmpIgnoreCase(const char *a,const char *b)
{
while(*a && *b)
{
register r=tolower(*a)-tolower(*b);
if(r)
return r;
++a;
++b;
}
return tolower(*a)-tolower(*b);
}
tolower **需要**一个'unsigned char'。为了便于携带,您的代码应该输入参数:'tolower((unsigned char)* a)'。 *哦...并为'register r'指定'int':这样你的代码也是'C99'兼容的。* – pmg 2010-09-16 20:03:33
strcasecmp不是C89/C99 - >不是ANSI C – user411313 2010-09-16 18:49:03