You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

控制台程序比较字符串数组时无响应,求冒泡排序实现姓氏排序

解决二维账户数组的冒泡排序问题(按姓氏字母序)

嘿,我看你在给从文件读取的账户数据做冒泡排序时卡壳了——尤其是调用sortInput函数时出了问题,还没搞定按姓氏字母排序的逻辑。咱们一步步拆解问题,再给你调整后的可运行代码参考。

首先,先补全并修正你没写完的sortInput函数代码,这里假设你的姓氏存储在每个账户数组的第1列(你可以根据实际存储位置修改lastNameColumn的值):

void sortInput(string theAccounts[5][7]) {
    bool swapped; // 把变量名从swap改成swapped,避免和标准库函数冲突
    string temp;
    const int numAccounts = 5; // 明确账户数量,方便后续修改
    const int lastNameColumn = 1; // 重点:改成你实际存储姓氏的列索引!

    do {
        swapped = false;
        // 冒泡排序内层循环:遍历到倒数第二个元素,防止越界
        for (int r = 0; r < numAccounts - 1; ++r) {
            // 比较当前行和下一行的姓氏,按字母序判断是否需要交换
            if (theAccounts[r][lastNameColumn] > theAccounts[r+1][lastNameColumn]) {
                // 交换整行的所有账户数据,避免姓氏和其他字段错位
                for (int c = 0; c < 7; ++c) {
                    temp = theAccounts[r][c];
                    theAccounts[r][c] = theAccounts[r+1][c];
                    theAccounts[r+1][c] = temp;
                }
                swapped = true; // 标记发生了交换,需要继续循环
            }
        }
    } while (swapped); // 当没有交换发生时,说明数组已经有序
}

几个关键的注意事项(你之前可能踩坑的地方):

  • 确认姓氏的列索引:这是最容易出错的点!你必须明确从文件读取的账户数据里,姓氏存在二维数组的哪一列(比如如果第一列是用户ID,第二列是姓氏,那索引就是1),如果这个值错了,排序逻辑完全不对。
  • 交换整行而不是单个字段:如果只交换姓氏字段,会导致姓氏和账户的其他信息(比如名字、账号)不匹配,所以要循环交换整行的7个字段。
  • 避免变量名冲突:原代码里用了swap作为变量名,但std::swap是C++标准库的函数,容易引发编译错误,改成swapped更安全。
  • 循环边界正确:内层循环要到numAccounts - 1,因为每次要比较r和r+1,如果循环到numAccounts,r+1就会超出数组范围,导致越界错误。

额外测试建议:

  • 在调用sortInput前后,分别打印整个二维数组的内容,对比排序前后的变化,确认姓氏是否按字母序排列。
  • 检查文件读取逻辑:确保从文件读取的每一行数据都正确存入了二维数组的对应列,有没有出现行错位、字段遗漏的情况——如果读取本身就错了,排序肯定也不对。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:37:59