我知道我不應該使用C風格的數組,但我試圖尋找一種方法來做到這一點。我試圖按字母順序排列const char*
陣列,但std::sort
沒有正確執行。我究竟做錯了什麼?它不改變數組。我不正確的是什麼?爲什麼不是std :: sort字符串數組的排序?
1
A
回答
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);
相關問題
- 1. 爲什麼字符串數組不正確排序?
- 2. 字符串數組加字符串不是錯誤,爲什麼?
- 3. 爲什麼在排序std :: string時,C++ 11 std :: sort()不會更快?
- 4. 排序字符串排列數組
- 5. 什麼是排序字符串
- 6. 字符串排序 - std :: set或std :: vector?
- 7. 排序字符串數組
- 8. 爲什麼是Python的 「排序()」 比慢 「副本,那麼的.sort()」
- 9. 排序字符串數組
- 10. 爲什麼不std :: sort在std :: list上不起作用?
- 11. 排序字符串數組
- 12. 排序字符串數組
- 13. 排序字符串數組
- 14. 爲什麼ruby對字符串數組的排序與sql order(postgres)不同?
- 15. 爲什麼MongoDB.Bson.BsonExtensionMethods.ToBson返回字節數組而不是字符串?
- 16. 爲什麼它是std :: list :: sort不起作用?
- 17. 用於排序字符串的C++ sort()函數
- 18. 爲什麼只有std :: list :: sort()?
- 19. 在字符串數組中排序字
- 20. 排序字符串數組與函數
- 21. 爲什麼JavaScript不按數字順序排序數值數組?
- 22. 爲什麼不是這個字符串數組工作?
- 23. std :: sort排序數組和索引列表?
- 24. 使用std :: sort(基於列)排序2d數組
- 25. 使用Sort方法排序字符串時發出的問題
- 26. 理由/討論爲什麼std :: sort不是被迫使用std :: swap
- 27. 對字符串數組進行排序
- 28. Ç快速排序字符串數組
- 29. 爲什麼usort()不排序數組?
- 30. 爲什麼不myDictionary.keys()。sort()對myDictionary的鍵列表進行排序?
+1爲顯示他的代碼中使用 –