——奈芙莲—— 2024-04-10 22:26 采纳率: 40%
浏览 11
已结题

//让人恼火的return值新:Process exited after 12.3 seconds with return value 3

#include <bits/stdc++.h>
using namespace std;
// 函数用于检查字符串是否是回文
bool ACchar(const string& s) {
    int leftAC = 0, rightAC = s.length() - 1;
    while (leftAC < rightAC) {
        if (s[leftAC] != s[rightAC]) {
            return false;
        }
        ++leftAC;
        --rightAC;
    }
    return true;
}
// 主函数
int main() {
    int n;
    cin >> n; // 输入小妖怪的数量
    string s;
    for (int i = 0; i < n; ++i) {
        cin >> s; // 输入小妖怪的首字母,并构建初始字符串
    }
    string Accepted; // 存储最终结果
    int minAC = INT_MAX; // 存储最小移动次数
    // 尝试所有可能的回文构建
    for (int i = 0; i < n; ++i) {
        string AC = s.substr(0, i + 1); // 从开始到第i+1个小妖怪
        reverse(AC.begin(), AC.end()); // 反转这部分字符串
        AC += s.substr(i + 1); // 将剩余的小妖怪添加到字符串的末尾
        // 如果当前字符串是回文,并且移动次数更少,则更新结果
        if (ACchar(AC) && (i + 1) < minAC) {
            Accepted = AC;
            minAC = i + 1;
        }
    }
    // 输出结果
    cout << Accepted << endl;
    return 0;
}

```c++


6
A
C
D
B
C
B
terminate called after throwing an instance of 'std::out_of_range'
  what():  basic_string::substr: __pos (which is 2) > this->size() (which is 1)

--------------------------------
Process exited after 12.3 seconds with return value 3
请按任意键继续. . .
  • 写回答

4条回答 默认 最新

  • 阿里嘎多学长 2024-04-10 22:26
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    你的代码中存在一个逻辑错误,当你在构建Accepted字符串时,使用了substr函数来截取子串。但是,在reverse操作后,你尝试将剩余的小妖怪添加到反转部分的末尾,这里有一个条件判断错误。

    AC += s.substr(i + 1);这一行,i + 1可能是索引越界,因为substr函数的第二个参数应该是小于或等于字符串长度的。当i等于n-1时,i + 1会超过s的长度,导致std::out_of_range异常。

    为了解决这个问题,你需要在reverse之前检查i + 1是否在s的范围内:

    if (i + 1 <= s.length()) {
        AC += s.substr(i + 1);
    }
    

    另外,由于minAC初始化为INT_MAX,在Accepted不是回文或者移动次数不更少时,minAC不会被更新。为了确保找到最小移动次数,你应该在更新minAC时也检查是否满足回文条件:

    if (ACchar(AC) && (i + 1) < minAC) {
        Accepted = AC;
        minAC = i + 1;
    }
    

    修复这两个问题后,程序应该可以正确运行并避免抛出异常。然而,根据你的描述,返回值3通常表示程序在执行过程中遇到了错误。如果你没有修改代码中的上述问题,那么return 3可能是由其他未提及的错误导致的。确保在修复上述错误之后再次运行程序。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月19日
  • 已采纳回答 4月19日
  • 创建了问题 4月10日

悬赏问题

  • ¥15 有两个非常“自以为是”烦人的问题急期待大家解决!
  • ¥30 STM32 INMP441无法读取数据
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧,别用大模型回答,大模型的答案没啥用
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error