C/C++
Как сделать свой itoa ? int перевести в текст. низкоуровнево.
у меня нет идей
Ничего сложного.
Берешь остаток от деления на 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;
Берешь остаток от деления на 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;
А нафига?
Создаёшь строку.
Берешь старший разряд числа - берешь цифру и записываешь её в строку (просто можешь свитч сделать если число = 0, значит '0' записываем и т.д.). Переходишь к следующему.
Можешь идти с младшего, идти проще будет. Только потом строку перевернуть придётся.
Создаёшь строку.
Берешь старший разряд числа - берешь цифру и записываешь её в строку (просто можешь свитч сделать если число = 0, значит '0' записываем и т.д.). Переходишь к следующему.
Можешь идти с младшего, идти проще будет. Только потом строку перевернуть придётся.
Похожие вопросы
- Программа на C++ с переводом Char в Int и наоборот при переводе возвращает НИЧЕГО
- Объсните пожалуйста значение скобок в int(*ptr)[10] и разницу с int(*ptr)[10]=new int[5][10]. (Подробности в описании)
- Различие указателей int *; и char *;
- Язык С++ : есть ли разница между этими двумя операциями? 1) int m = (int)n; 2) int m = int(n).
- Strlen для int массивов.(Си)
- При присвоении i++; или ++i; разница есть а вот есть ли разница при присвоении int &i; int& i; int* i; int *i;
- Что за числа выводятся при переполнении int в C++?
- Здраствуйте, я не понимаю что означает "int" и "main" можете обьяснить)
- Приведение доли к int в с++
- Определение числа в строке int или float
int digit = ...;
if (digit < 0) digit *= -1;
s = char(int('0') + digit) + s;