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

//让人恼火的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日