下面的代碼,來自於文章C++ quirks, part 198276的std :: string比較,辭書或不
include <iostream>
#include <string>
using namespace std;
int main()
{
std::string a = "\x7f";
std::string b = "\x80";
cout << (a < b) << endl;
cout << (a[0] < b[0]) << endl;
return 0;
}
令人驚訝的是output是
1
0
不宜字符串比較是辭書?如果是,輸出是如何解釋的?
您是否閱讀過網站上給出的解釋?那個解釋怎麼樣對你沒有意義? –
@sharth這似乎違反了[字典比較](http://en.wikipedia.org/wiki/Lexicographical_order)是什麼;無論是數學還是編程概念。問題在於,_字符串比較不應該是字典式的嗎?_爲什麼需要重寫一個完善的定義?我們是否應該在標準中出現「詞典」時擔心,我是否擔心過一個例外。我的意思是,當圍繞一個堅實的概念繞道而行時,關注的分類標準已經發生了變化。 –
請注意[字典順序](http://en.wikipedia.org/wiki/Lexicographical_order)不是[按字母順序](http://en.wikipedia.org/wiki/Alphabetical_order)。我們按字典順序排列字符串。要按字母順序對它們進行排序,您需要有關字符編碼的信息。一個'std :: string'不存儲關於這個的任何信息,這意味着它不知道字符串中的特定字符是'A'還是'''。 –