Почему моя функция обратных целых чисел специально не работает с положительным значением int из 2 цифр? C

#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(...) вместо [...] того, чтобы ловить такие ошибки.