You need to enable JavaScript to run this app. C++中大写字母为何会影响字符串比较(姓名排序场景)?
优惠活动
大模型
产品
解决方案
定价
更多

C++中大写字母为何会影响字符串比较(姓名排序场景)?

问题背景
  • 我是正在学习C的新手,目前跟着本贾尼·斯特劳斯特鲁普所著的《C程序设计原理与实践(第2版)》完成配套练习。为了不超前接触书本后续章节的知识点,我只用已经掌握的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;
异常原因说明
  • C++标准库中string的大小比较规则,是逐位对比两个字符串每个字符对应的ASCII编码值,编码值更小的字符串,会被判定为“更小”,在升序排序时排在前面。
  • 通用ASCII编码的取值规则为:大写英文字母(A-Z)的编码范围是6590,小写英文字母(a-z)的编码范围是97122,所有大写字母的编码值都比同字母的小写形式小32。
  • 这种编码规则和人直觉上的“字母表顺序”存在差异:比如对比"apple"和"Bob"两个字符串,程序会因为首字符'B'的编码值(66)远小于'a'的编码值(97),判定"Bob"比"apple"更小,将"Bob"排在排序结果的最前面。最终实际排序效果就是:所有以大写字母开头的姓名,都会排在纯小写字母开头的姓名前面,和预期结果不符。

内容的提问来源于stack exchange,提问作者Chrisplusian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.02 01:45:05