C/C++

Как сделать свой itoa ? int перевести в текст. низкоуровнево.

у меня нет идей
Олег Шикунов
Олег Шикунов
30 065
Ничего сложного.

Берешь остаток от деления на 10, преобразуешь его в char и прибавляешь к строке, а результат этого деления еще раз делишь на 10 и так до тех пор, пока не останется результат 0.

Это же int, так что деление целочисленное, и это вполне корректный способ пройтись по всем цифрам числа и сделать из них char'ы.

Допустим число 54365

54365 % 10 = 5
54365 / 10 = 5436

5436 % 10 = 6
5436 / 10 = 543

И так далее.

А вот так преобразовать цифру (остаток) в char и прибавить к строке
std::string s;
s = char(int('0') + 5) + s;

Естественно нужно учесть что число может быть отрицательным...
Отрицательное число можно сделать положительным, умножив его на -1.
Но лучше не умножать все число на -1 (потому что отрицательное число, умноженное на -1, может не влезть в int, там асимметрично), а именно каждую цифру умножать на -1.

В итоге принцип такой:

int digit = остаток;
if (digit < 0) digit *= -1;
s = char(int('0') + digit) + s;
Юрий Кубанов
Юрий Кубанов
92 464
Лучший ответ
А нафига?
Создаёшь строку.
Берешь старший разряд числа - берешь цифру и записываешь её в строку (просто можешь свитч сделать если число = 0, значит '0' записываем и т.д.). Переходишь к следующему.

Можешь идти с младшего, идти проще будет. Только потом строку перевернуть придётся.
Эдуард Княжев
Эдуард Княжев
28 652
Юрий Кубанов Непонятно, зачем делать свитч, когда можно
int digit = ...;
if (digit < 0) digit *= -1;
s = char(int('0') + digit) + s;