首页 > 解决方案 > 为什么我的反向整数函数特别不适用于 2 位数的正整数?C++

问题描述

    //declare variables
    int size;
    string str = to_string(x);  //stores parameter number
    string str2;     //stores reversed number
    int reverseInt = 0;
    size = str.size();
    
    //if the input integer is positive reverses using the for loop.
    if (x > 0)
    {
        for (int i = 0; i < size; i++)
        {
            str2[size-1-i] = str[i];
        }
    }
    //exception handling for underflow/overflow
    try 
    {
        reverseInt = stoi(str2);      
    }
    catch (const std::out_of_range& oor) 
    {
        return 0;
    }
    return reverseInt;

以上是我应该影响任何类型的正整数的函数的一部分,我将其他所有内容都注释掉以确保没有外部影响。这是某个地方的问题。我不明白的是为什么输入 19,例如,让我得到 916 ...... 6 来自哪里?我无法理解我是如何得到 6 的。最糟糕的部分是 -19 使用基本相同的方法完美转换。10 给我 16,15 给我 516,而 10 给我 16,这对我来说毫无意义。

标签: c++

解决方案


您没有为str2.

string str2;     //stores reversed number
str2.reserve(str.size());

使用.at(...)而不是[...]捕获此类错误。


推荐阅读