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