【发布时间】:2013-02-19 04:56:30
【问题描述】:
我对 C++ 中字符串的字母顺序有疑问。假设我有两个字符串:
string x="asd123";
string y="asd136";
我们可以将这些字符串与 运算符进行比较吗?例如:我们可以说
if(x>y)
cout<<".....";
这总是有效吗?谢谢。
【问题讨论】:
我对 C++ 中字符串的字母顺序有疑问。假设我有两个字符串:
string x="asd123";
string y="asd136";
我们可以将这些字符串与 运算符进行比较吗?例如:我们可以说
if(x>y)
cout<<".....";
这总是有效吗?谢谢。
【问题讨论】:
字符串按字典顺序(字典样式)进行比较,一个字符串是另一个字符串的较短子集,位于较长字符串之前。但是不一定是按字母顺序的;它是根据底层字符编码的。现在大多数系统都使用 ASCII,所以小写字母按顺序出现,大写字符按顺序出现,大写字符在小写字符之前。
【讨论】:
是的,将std::strings 与std::string::operator> 进行比较总是有效的。比较字符串lexicographically。这意味着依次比较两个字符串的每个对应元素,直到找到不相等的两个,并且该排序决定了字符串的顺序。
字典顺序对std::basic_string 的每个元素执行<。也就是说,对于std::string,每个char 将使用< 进行比较。它只会比较那些chars 的值。就 C++ 而言,char 只是一个数值。这些值通过 执行字符集 映射到字符串文字中的字符(对于现代 C++ 编译器,它几乎总是至少与 ASCII 兼容)。
【讨论】:
string 是字节的集合,而不是字符的集合。比较是按字节值。没有免费的午餐。
std::string 使用UTF8,因为char_traits<char> 是必需 来实现eq 和lt 以给出相同的结果如== 和<。