#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_rangeamp; oor)
{
return 0;
}
return reverseInt;
Выше приведена моя единственная часть функции, которая должна влиять на положительное целое число любого вида, все остальное я прокомментировал, чтобы убедиться, что нет никакого внешнего эффекта. В этом-то и заключается проблема. Чего я не понимаю, так это почему ввод 19, например, дает мне 916… откуда берется 6? Я не могу понять, как я получил эту цифру 6. Худшая часть разочарования заключается в том, что -19 преобразуется идеально, используя в основном тот же метод. 10 дает мне 16, 15 дает мне 516, а 10 дает мне 16, для меня это просто не имеет смысла.
Комментарии:
1. Мне немного любопытно, каков ожидаемый результат присвоения значения
str2[size-1-i]
, покаstr2
ему еще не присвоен размер. Я полагаюstr2
, что это пустая строка, что происходит, когда вы назначаете символ в какой-то позиции больше0
или1
ему, например, когдаx
он равен 1000 или больше ?2.
str2
пусто, поэтому нет места для хранения (или его недостаточно). Вы переписываете то, чего не должны. Вы можете изменить строку наstd::string str2(str.rbegin(), str.rend());
обратную . Смотри здесь .3. На самом деле вы пытаетесь изменить строку, а не целое число. Вся процедура реверсирования вообще не зависит от содержимого строки, это может быть «19», но это также может быть «19.5e7», или «Ха-ха», или «Прощай, детка!».
4. Что касается того, что происходит, когда x > 1000, как указано в названии, он работает неправильно только для размера 2 или двузначного числа. 100 работ. 999999 работ. 10-99 не работает.
5. В ответ на CiaPan, хотя я согласен, что это могло бы работать так, если бы эта функция была просто в основном с некоторой случайной переменной x, это функция с параметром int, если входные данные не являются int, проблема не будет функцией, и это практически не имеет отношения к вопросу. В целом: очень полезно.
Ответ №1:
Вы не выделили память для str2
.
string str2; //stores reversed number
str2.reserve(str.size());
Используйте .at(...)
вместо [...]
того, чтобы ловить такие ошибки.