[英]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.