【发布时间】: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甚至不交换字符串。