2010-09-16 164 views
0

有沒有辦法按字母順序對字符串數組進行排序,其中字符串既包含大寫字母又包含小寫字母?在C中使用大寫字母和小寫字母對字符串排序

由於大寫字母的ASCII值較低,所以像strcmp這樣的函數將始終顯示它在小寫字母之前。例如,可以說我們想排序「ABCD」,「ZZZZ」,「龜」,「JAVA」,「水」。

當使用像STRCMP功能將這些字符串進行排序,就變成:

ABCD JAVA ZZZZ 龜 水

當它應該是:

ABCD JAVA 龜 水 ZZZZ

回答

3

與strcasecmp或strcoll一起使用qsort作爲比較函數。

strcasecmp可能會更快,但strcoll更靈活,並使用程序語言環境,以便非ASCII字符串工作。

+0

strcasecmp不是C89/C99 - >不是ANSI C – user411313 2010-09-16 18:49:03

2

試試strcoll(3)

+0

如何使用呢?從我的理解,它調用strcmp,除非有一個區域設置...但我不知道區域是什麼。 – DemonicImpact 2010-09-16 18:24:56

+0

strcoll工程案例類似於strcmp,不是針對您的問題的解決方案 – user411313 2010-09-16 18:47:29

+0

@ user411313,取決於您設置的區域設置。 – 2010-09-16 21:01:14

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); 
} 
+1

tolower **需要**一個'unsigned char'。爲了便於攜帶,您的代碼應該輸入參數:'tolower((unsigned char)* a)'。 *哦...併爲'register r'指定'int':這樣你的代碼也是'C99'兼容的。* – pmg 2010-09-16 20:03:33

相關問題