有没有办法按字母顺序对字符串数组进行排序,其中字符串包含大写字母和小写字母?
因为大写字母的 ASCII 值较低,所以像 strcmp 这样的函数总是会显示它在小写字母之前。例如,假设我们想要对“ABCD”、“ZZZZ”、“turtle”、“JAVA”、“water”进行排序。
当使用 strcmp 之类的函数对这些字符串进行排序时,它变为:
ABCD JAVA ZZZZ 龟水
什么时候应该:
ABCD JAVA 龟水 ZZZZ
有没有办法按字母顺序对字符串数组进行排序,其中字符串包含大写字母和小写字母?
因为大写字母的 ASCII 值较低,所以像 strcmp 这样的函数总是会显示它在小写字母之前。例如,假设我们想要对“ABCD”、“ZZZZ”、“turtle”、“JAVA”、“water”进行排序。
当使用 strcmp 之类的函数对这些字符串进行排序时,它变为:
ABCD JAVA ZZZZ 龟水
什么时候应该:
ABCD JAVA 龟水 ZZZZ
将 qsort 与 strcasecmp 或 strcoll 一起用作比较函数。
strcasecmp 可能更快,但 strcoll 更灵活,并且使用程序区域设置,以便非 ASCII 字符串工作。
试试strcoll(3)
。
在严格的 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);
}