1

有没有办法按字母顺序对字符串数组进行排序,其中字符串包含大写字母和小写字母?

因为大写字母的 ASCII 值较低,所以像 strcmp 这样的函数总是会显示它在小写字母之前。例如,假设我们想要对“ABCD”、“ZZZZ”、“turtle”、“JAVA”、“water”进行排序。

当使用 strcmp 之类的函数对这些字符串进行排序时,它变为:

ABCD JAVA ZZZZ 龟水

什么时候应该:

ABCD JAVA 龟水 ZZZZ

4

3 回答 3

4

将 qsort 与 strcasecmp 或 strcoll 一起用作比较函数。

strcasecmp 可能更快,但 strcoll 更灵活,并且使用程序区域设置,以便非 ASCII 字符串工作。

于 2010-09-16T18:21:10.443 回答
2

试试strcoll(3)

于 2010-09-16T17:48:53.643 回答
2

在严格的 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);
}
于 2010-09-16T18:56:26.253 回答