2013-01-03 108 views

回答

5

默認std::sort比較功能是簡單地將指針(內存地址)與<運算符進行比較。它實際上並沒有按字母順序比較C字符串。您需要創建一個自定義比較函數,該函數比較字符串按字母順序排列的字符串。調用std::strcmp

bool compare(const char* s1, const char* s2) 
{ 
    return std::strcmp(s1, s2) < 0; 
} 

int main() 
{ 
    const char * str[5] = {"alpha", "gamma", "beta", "delta", "chi"}; 
    int size = sizeof(str)/sizeof(*str); 
    std::sort(str, str + size, compare); 
    for (int i = 0; i < size; i++) std::cout << str[i] << ", "; 
} 
2

也許因爲const char *默認的比較是比較指針值(和字符串常量發生在陣列順序已經被分配)?使用std::string

3

問題很簡單:您正在使用默認比較,它只會比較指針值。通常這些地址會有上升的地址,所以你不會看到任何改變。

你必須寫你自己的比較函數:

int comp(const char *c1, const char *c2) { 
    return strcmp(c1, c2) < 0; 
} 

std::sort(str, str + size, &comp); 
+0

+1爲顯示他的代碼中使用 –

相關問題