c++ - 为什么我的反向整数函数特别不适用于 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,这对我来说毫无意义。
解决方案
您没有为str2
.
string str2; //stores reversed number
str2.reserve(str.size());
使用.at(...)
而不是[...]
捕获此类错误。