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

有没有办法按字母顺序对字符串数组进行排序,其中字符串包含大写和小写字母? 因为大写字母具有较低的ASCII值,所以像strcmp这样的函数总是会显示它在小写字母之前。例如,假设我们想要排序“ABCD”,“ZZZZ”,“乌龟”,“JAVA”,“水”。 当使用strcmp等函数对这些字符串进行排序时,它变为: A B C D JAVA ZZZZ 龟 水 应该是什么时候: A B C D JAVA 龟 水 ZZZZ     
已邀请:
使用带有strcasecmp或strcoll的qsort作为比较函数。 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);
}
    

要回复问题请先登录注册