簡體   English   中英

在C中使用大寫字母和小寫字母對字符串數組進行排序

[英]Sorting an Array of strings with capital and lowercase letters in C

有沒有一種方法可以按字母順序對字符串數組進行排序,其中字符串包含大寫字母和小寫字母?

由於大寫字母的ASCII值較低,因此諸如strcmp之類的功能將始終顯示其位於小寫字母之前。 例如,假設我們要對“ ABCD”,“ ZZZZ”,“烏龜”,“ JAVA”,“水”進行排序。

當使用諸如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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM