【问题标题】:C++ why do capital letters effect comparison with strings (sorting names)C ++为什么大写字母会影响与字符串的比较(排序名称)
【发布时间】:2021-05-25 05:41:15
【问题描述】:

我是 C++ 新手,正在阅读 Bjarne Stroustrup 的“Programming and Practices using C++, 2nd Edition”。

我正在做一个练习,对三个名字进行排序。我使用到目前为止提供的工具来完成此操作,以免跳到本书前面。方法是在if 语句中只使用大于和小于。

我尝试使用许多输入对此进行测试,但发现了一些奇怪的地方:当我使用大写字母时,它并不总是正确排序。谁能解释一下为什么?

string name1, name2, name3;
cout << "Enter three names : \n";
cin >> name1 >> name2 >> name3;
if (name1 > name2)
{
    string temp;
    temp = name2;
    name2 = name1;
    name1 = temp;
}
if (name2 > name3)
{
    string temp;
    temp = name3;
    name3 = name2;
    name2 = temp;
}
if (name1 > name2)
{
    string temp;
    temp = name2;
    name2 = name1;
    name1 = temp;
}
cout << "In alphabetical order : \n" << name1 << '\n' << name2 << '\n' << name3;

这个测试的输出:

【问题讨论】:

  • 你最近检查过你的 ASCII 表吗?
  • 字符只是非常小的整数。字符到其整数值的映射由 ASCII 定义。字母“G”的值是 71,而“g”的值是 103——它们不是一回事。
  • 我是 C++ 新手。我是一个试图学习的EE,所以我问我在这里缺少什么。在本书中,它们表明您可以通过这种方式比较单词,但不提供任何细微差别。所以,为了回答你的问题,我没有检查过 ASCII 表。这是比较检查的吗?基于 ASCII 值?
  • 您的书应该解释这正是std::strings 相互比较的方式。如果没有,您可能想寻找一本更有帮助的书。
  • @Chrisplusian 这是真正的代码吗?中间的if 甚至不交换字符串。

标签: c++ string sorting


【解决方案1】:

从 EE 的角度来看,C++(或 C 语言)中的字符串只是机器内的二进制编码数据。

每个字符(字母、数字、符号) - 都分配有一个 ASCII 数值,以便计算机可以解释您所引用的字符。

这里要理解的是,小写字母(例如“a”)和大写字母(例如“A”)具有不同的数值。因此,当比较字符串中的所有字符时,大小写不同的字符串会产生不同的数值,从而导致您看到的行为。

请记住,对于人类 - 您正在比较一个字符串。对于机器来说,它会创建一个字符串的数字表示并以这种方式进行比较。

编辑:Here 是“比较”功能的参考,即

【讨论】:

  • 所以为了澄清这些比较... (string > stringA) 将比较 's' 和 's' 然后 't' 和 't' 等的 ASCII 值?
  • 基本上是的,如果到该点的字符相同,则进一步向下链。
猜你喜欢
  • 2012-11-18
  • 1970-01-01
  • 1970-01-01
  • 2018-02-28
  • 1970-01-01
  • 2012-02-17
  • 2010-12-20
  • 2013-12-25
  • 1970-01-01
相关资源
最近更新 更多