排序文本文件時發現非常混亂。不同的算法/應用產生不同的結果,例如,在比較兩個字符串str1=";P"
和str2="-_-"
字符串(「; P」)較大或字符串(「-_-」)較大?
僅供參考這裏給ASCII在這些字符串中的每個字符:
char(';') = 59; char('P') = 80;
char('-') = 45; char('_') = 95;
所以,我已經嘗試了不同的方法來確定哪些字符串是更大的,這裏是我的結果:
在Microsoft Office Excel 排序命令:
「; P」 < 「-_-」
C++的std :: string ::比較(串& STR2),即
str1.compare(str2)
「; P」> 「-_-」
C#string.CompareTo(),即
str1.CompareTo(str2)
「; P」 < 「-_-」
C#string.CompareOrdinal(),即
CompareOrdinal(w1, w2)
「; P」> 「-_-」
如圖所示,結果很多!實際上,我的直觀結果應該等於方法2和4,因爲ASCII(';')= 59大於ASCII(' - ')= 45。
所以我不知道爲什麼Excel和C#string.CompareTo()給出了相反的答案。注意到在C#中第二個比較函數名爲string.CompareOrdinal()
。這是否意味着默認的C#string.CompareTo()
函數不是「序數」?
任何人都可以解釋這種不一致嗎?
任何人都可以解釋CultureInfo = {en-US},爲什麼它告訴; P> -_-?什麼是潛在的動機或原則?我曾經聽說過不同的文化信息中的不同的雙重乘法。這是一個文化衝擊..!
查看'CompareTo()'中的第二個參數 – SLaks 2012-03-02 00:08:44
除了基於序數值的排序之外,還有兩個選項是長度比較(不太可能)或詞典比較,這很可能是您的情況「更大」的確是錯誤的單詞,「更大」的字符串將是「-_-」,因爲它是3個字符,而「P」有2個字符 – Xeo 2012-03-02 00:18:00
可能與[標點符號n標記vs字母](http://stackoverflow.com/questions/9475535/order-of-punctuation-marks-vs-letters)。檢查我的答案那裏的鏈接 - 特別是CompareOptions.StringSort之一。 – 2012-03-02 03:17:00