2014-02-23 56 views
0

如何反轉Rust 0.9中的字符串?如何反轉0.9中的字符串?

根據rosettacode.org這個工作在0.8:

let reversed:~str = "一二三四五六七八九十".rev_iter().collect(); 

...但我不能讓迭代器對字符串的工作在0.9。

也試過std::str::StrSlice::bytes_rev但我還沒有想出一個乾淨的方式將結果轉換回字符串,而不會編譯器窒息。

回答

2

所有遍歷所有字節的第一和倒車將打破多字節字符(您想對字符迭代)

let s = ~"abc"; 
let s2: ~str = s.chars_rev().collect(); 
println!("{:?}", s2); 
+0

哇哦,我是如此接近,甚至沒有意識到這一點。謝謝! –

+2

請注意,如果您有任何分解的字符(如「e \ u0301」(é)),則它將無法正常工作,因爲它會交換這兩個字符,並且組合急性重音會影響錯誤的字符。 –

+1

正如@KevinBallard所說,這個迭代遍歷各個'char'(它們是Unicode代碼點),所以反轉只是重新排列代碼點。真正的字形重新排序(用於更正確的Unicode反轉)需要字形處理,Rust stdlib目前完全沒有。 :( – huon