假设:a< b在b之前返回true。
代码
std::string a = "i";
std::string b = "Love";
std::cout << "(a < b) = " << ((a < b) ? "true" : "false");输出
(a < b) = false 我们知道“我”的意思是“爱”,所以为什么上面的代码是假的?
我最初的假设是不是错了?
感谢你的帮助。
发布于 2021-10-16 12:04:39
在C++实现使用的字符编码中,小写“l”的字符代码比大写“L”要高。大多数C++实现目前对字符a和a使用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++库中存在不区分大小写的字符串比较。
发布于 2021-10-16 12:02:30
在ASCII大写字母中,大写字母的出现早于小写。您可以通过std::cout << (int)'L' << ' ' << (int)'i';打印其值。
发布于 2021-10-16 12:13:37
其他用户已经指出,在大多数常见的字符编码(即: ASCII和Unicode)中,大写字母i并不先于大写字母L。阅读更多关于ASCII和小写字母与大写字母的区别的信息。
我想补充的是,如果您想要执行比较而不关心字母大小写(这样i就像您想要的那样先于L ),您可以使用特定的函数,比如POSIX兼容的strcasecmp()。还请参阅其他比较字符串的方法,忽略大小写。。
https://stackoverflow.com/questions/69595378
复制相似问题