[C ++使用to_string,反向,stoi组合的反向编号给出运行时错误实例超出范围

问题描述 投票:0回答:2

由于实例超出范围异常,一直试图解决运行时错误。我将int转换为字符串,将字符串反转并使用stoi将其返回给int。简单的测试数字可以完美地反转,但是更大的数字超出范围。不确定代码中的何处要针对超出范围的异常进行调整。超级卡住了,请帮忙。

int reverse(int x) {

    bool negFlag = false;
    if(x < 0)
    {
        negFlag = true;
    }

    string xString = std::to_string(abs(x));
    std::reverse(xString.begin(), xString.end());
    int xNum = std::stoi(xString);

    return (negFlag == true)? -xNum: xNum;
}

这里是返回的错误:

terminate called after throwing an instance of 'std::out_of_range'
what():  stoi
Last executed input:  1534236469

较小的数字效果很好。

Your input: 123
Output:     321
Expected:   321

我的字符串末尾是否有\\ 0会在转换中丢弃所有内容?这些C ++方法的新手。非常感谢。真的很想确定这些方法并能够轻松使用它们。

c++ runtime-error reverse outofrangeexception
2个回答
0
投票

1,534,236,469的反向是9,646,324,351。典型的32位int可以容纳的最大值为2,147,483,647,因此不适合该最大值。

您需要让函数返回更大的值,例如long long(至少64位)并为其使用适当的转换功能,例如:

long long reverse(int x) {

    //...

    long long xNum = std::stoll(xString);

    //...

}

是否还要将输入类型更改为更大的值,取决于函数应该能够处理的最大输入值。


0
投票

输入范围大于int可以容纳的范围。将其更改为long long,它应该可以工作。

long long reverse(long long x) {

bool negFlag = false;
if(x < 0)
{
    negFlag = true;
}

string xString = std::to_string(abs(x));
std::reverse(xString.begin(), xString.end());
long long xNum = std::stoll(xString);

return (negFlag == true)? -xNum: xNum;
}

注意,返回类型也需要更改。

© www.soinside.com 2019 - 2024. All rights reserved.