使用C中的大写和小写字母对字符串数组进行排序

时间:2010-09-16 17:47:02

标签: c arrays string sorting capitalization

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

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

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

ABCD JAVA ZZZZ 龟 水

应该是:

ABCD JAVA 龟 水 ZZZZ

3 个答案:

答案 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);
}