假設:當 a 在 b 之前時, a < b 回傳 true。
代碼
std::string a = "i";
std::string b = "Love";
std::cout << "(a < b) = " << ((a < b) ? "true" : "false");
輸出
(a < b) = false
我們知道“i”在“Love”之前,那么為什么上面的代碼回傳false?
我最初的假設是錯誤的嗎?
感謝幫助。
uj5u.com熱心網友回復:
在 ASCII 中,大寫字母早于小寫字母。您可以通過以下方式列印其值std::cout << (int)'L' << ' ' << (int)'i';
uj5u.com熱心網友回復:
在 C 實作使用的字符編碼中,小寫“l”比大寫“L”具有更高的字符代碼。大多數 C 實作目前對字符 AZ 和 az 使用 ASCII。在 ASCII 中,“L”的代碼是 76,“i”的代碼是 105。
要查看您的 C 實作用于字符的代碼,您可以將它們轉換為int并列印它們。下面是一個使用字符常量的例子:
std::cout << static_cast<int>('i') << '\n'; // Will print 105 in implementations that use ASCII.
通常對于字串文字和字串,您可以使用下標選擇單個字符:
std::cout << static_cast<int>("Love"[0]) << '\n'; // Will print 76 in implementations that use ASCII.
當您想比較單個字符而忽略大小寫時,您可以使用toupper或tolower(在 中宣告<cctype>)將兩個字符轉換為相同的大小寫進行比較:
std::cout << (tolower(a[0]) < tolower(b[0]) ? "true" : "false") << '\n';
要對字串執行此操作,您可能需要撰寫額外的代碼;我不知道標準 C 庫中不區分大小寫的字串比較。
uj5u.com熱心網友回復:
其他用戶已經指出,在最常見的字符編碼(即:ASCII和Unicode),小寫字母i確實不普瑞森大寫字母L。閱讀有關ASCII以及小寫字母和大寫字母之間的區別的更多資訊。
我想補充一點,如果您想在不關心字母大小寫的情況下進行比較(以便像您想要的那樣i在前面L),您可以使用特定功能,例如 POSIX-compliant strcasecmp()。另請參閱忽略大小寫比較字串的其他方法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/321789.html
