【问题标题】:Do < and > on C++ strings reflect alphabetical ordering?C++ 字符串上的 < 和 > 是否反映字母顺序?
【发布时间】:2013-02-19 04:56:30
【问题描述】:

我对 C++ 中字符串的字母顺序有疑问。假设我有两个字符串:

    string x="asd123";
    string y="asd136";


我们可以将这些字符串与 运算符进行比较吗?例如:我们可以说

    if(x>y)
    cout<<".....";

这总是有效吗?谢谢。

【问题讨论】:

标签: c++ string


【解决方案1】:

字符串按字典顺序(字典样式)进行比较,一个字符串是另一个字符串的较短子集,位于较长字符串之前。但是不一定是按字母顺序的;它是根据底层字符编码的。现在大多数系统都使用 ASCII,所以小写字母按顺序出现,大写字符按顺序出现,大写字符在小写字符之前。

【讨论】:

  • A-Z 字母。非英语的“特殊”字符,例如 å、ä、ö、ń、ǹ、í、ì、é、è、ë 和许多其他类似的东西,如果不做进一步的工作,根本无法很好地排序。
【解决方案2】:

是的,将std::strings 与std::string::operator&gt; 进行比较总是有效的。比较字符串lexicographically。这意味着依次比较两个字符串的每个对应元素,直到找到不相等的两个,并且该排序决定了字符串的顺序。

字典顺序对std::basic_string 的每个元素执行&lt;。也就是说,对于std::string,每个char 将使用&lt; 进行比较。它只会比较那些chars 的值。就 C++ 而言,char 只是一个数值。这些值通过 执行字符集 映射到字符串文字中的字符(对于现代 C++ 编译器,它几乎总是至少与 ASCII 兼容)。

【讨论】:

  • @pst: string 是字节的集合,而不是字符的集合。比较是按字节值。没有免费的午餐。
  • @sftrabbit:MSVC,最大的编译器之一,does not default to UTF8
  • @MooingDuck 谢谢 - 我对 MSVC 不是很熟悉。
  • @MooingDuck - 一个实现不能为std::string 使用UTF8,因为char_traits&lt;char&gt;必需 来实现eqlt 以给出相同的结果如==&lt;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-21
  • 2020-04-16
  • 1970-01-01
  • 1970-01-01
  • 2011-10-14
  • 2012-01-31
  • 2013-12-16
相关资源
最近更新 更多