Как перевести число в строку
Нередко в программах встречается ситуация, когда надо преобразовать число в строку или строку в число. Для этой цели в стандартной библиотеке языка С определены функции strtol() и snprintf() .
Из строки в число. strtol
Функция strtol() преобразует строку в число типа long int . Функция определена в заголовочном файле stdlib.h и имеет следующий прототип:
long strtol(const char *restrict str, char **restrict str_end, int base);
- str — строка с числом, которое надо преобразовать в числовой тип. Ключевое слово restrict указывает компилятору оптимизировать код и что никакой другой параметр не будет указывать на адрес данного параметра.
- str_end — указатель на последний символ строки. Данный параметр можно игнорировать, передавая ему значение NULL
- base — основание, система исчисления, в которую надо преобразовать данные (значение от 2 до 36).
Результатом функции является преобразованное число типа long .
Например, преобразуем строку в число в десятичной системе:
#include #include int main(void) < const char * str = "24 flowers"; long result = strtol(str, NULL, 10); printf("Result: %ld\n", result); // Result: 24 return 0; >
В примере выше второй параметр функции никак не использовался — мы ему передавали значение NULL , и функция нормально работала. Однако он может быть полезен, если нам надо получить остаток строки, которая идет после числа:
#include #include int main(void) < const char * str = "24 flowers"; char* str_end; long result = strtol(str, &str_end, 10); printf("Result: %ld\n", result); // Result: 24 printf("Rest of the string:%s\n", str_end); // Rest of the string: flowers return 0; >
Из числа в строку. snprintf
Функция snprintf() преобразует число в отформатированную строку. Функция определена в заголовочном файле stdio.h и имеет следующий прототип:
int snprintf(char *restrict str_buffer, size_t buffer_size, const char *restrict format, . );
- str_buffer — строка, в которую помещается преобразованное число.
- buffer_size — максимальное количество символов строки. Функция записывает в строку buffer-size — 1 байт и добавляет концевой нулевой байт
- format — задает формат преобразования в строку.
При успешном преобразовании функция возвращает количество символов, записанных в строку (исключая концевой нулевой байт). При неудачном преобразовании возвращается отрицательное число.
#include int main(void) < int number = 354; char str [10]; snprintf(str, sizeof str, "%d", number); printf("Result: %s\n", str); // Result: 354 return 0; >
При этом строка форматирования может содержать множество параметров:
#include int main(void) < int count = 3; double price = 79.99; char str [50]; snprintf(str, sizeof str, "Count: %d \tPrice: %.2f", count, price); printf("%s\n", str); // Count: 3 Price: 79.99 return 0; >
Конвертирование целого числа в строку по любому основанию¶
Предположим, вы хотите преобразовать целое число в строку по какому-либо основанию между двойкой и шестнадцатью. Например, перевести число 10 в строковое десятичное "10" или двоичное "1010" представление. Хотя существует множество алгоритмов для решения этой задачи (в том числе тот, что обсуждался в разделе о стеках), рекурсивная формулировка задания будет самой элегантной из них.
Давайте рассмотрим конкретный пример, используя основание 10 и число 769. Предположим, у нас есть последовательность символов, соответствующих первым десяти цифрам, — что-то вроде convString = "0123456789" . Тогда конвертировать число, меньшее десяти, в его строковый эквивалент очень просто: достаточно всего лишь найти его в этом перечне. Например, для числа 9 строка будет convString[9] или "9" . Если мы сможем организовать разбиение числа 769 на три цифры 7, 6 и 9, то конвертировать их будет просто. Вариант с числом меньше 10 очень подходит для базового случая рекурсии.
Зная наше основание, можно положить, что алгоритм в целом будет включать три компонента:
- Разбить первоначальное число на последовательность из цифр.
- Конвертировать каждое из них в строку с помощью поиска.
- Слить получившиеся односимвольные строки в одну, которая и будет конечным результатом.
Следующий шаг — это придумать, как изменять состояние и продвигаться в строну базового случая. Поскольку мы работаем с числовыми значениями, то давайте рассмотрим, какие математические операции могут уменьшить число. Наиболее очевидными кандидатами будут деление и вычитание. Хотя последнее может работать, не совсем понятно, что из чего требуется вычитать. А вот деление нацело с получением остатка даёт нам чёткое направление. Давайте посмотрим, что произойдёт, если мы разделим число на основание, по которому пытаемся конвертировать.
Разделив 769 на 10 нацело, получим 76 и 9 в остатке. Это даст нам два хороших результата. Во-первых, остаток меньше нашего основания, следовательно, сразу же может быть преобразован в строку. Во-вторых, у нас есть число, меньшее первоначального и приближающееся к базовому случаю. Теперь нужно перевести в строковое представление 76. Вновь использовав деление нацело, получим 7 и 6 в остатке. Наконец, задача свелась к конвертированию 7, что легко может быть сделано, поскольку удовлетворяет условию \(n < base\) базового случая ( \(base = 10\) ). Последовательность проделанных нами операций проиллюстрирована на рисунке 3. Заметьте, что число, которое мы хотим запомнить, находится в коробочке остатка вдоль правого края диаграммы.

Рисунок 3: Преобразование целого числа в строку по основанию 10.
ActiveCode 3 демонстрирует код на Python, реализующий описанный выше алгоритм для любого основания между двойкой и шестнадцатью.
Как перевести число в строку в Javascript?
Чтобы преобразовать число в строку необходимо вызвать метод toString() у числа.
const number = 5555; const notNumber = number.toString();
теперь в notNumber находит не число, а строка. Проверить можно с помощью typeof
typeof notNumber; // 'string'
Также это сработает с отрицательными числами
const negative = -150; const notNegativeNumber = negative.toString(); console.log(notNegativeNumber); // => '-150' - теперь это строка.
Из этого числа мы можем взять символ.
const firstChar = notNegativeNumber[0]; console.log(firstChar); // => '-'
Python число в строку
Чтобы конвертировать число в строку, используйте встроенную функцию str() . Эта функция в качестве входящих данных принимает число (или другой тип данных), а в результате выдает строку.
Примеры
Вот один пример:
>>> str(123) '123'
Если число является значением переменной, конвертировать его можно следующим образом:
>>> number = 999 >>> number_as_string = str(number) >>> number_as_string '999'
Конкатенация строк и чисел в Python
Иногда возникает необходимость сконструировать строку, содержащую число из другой переменной. Вот пример, как это делается:
>>> week = 33 >>> greeting = "it is week " + str(week) >>> greeting 'it is week 33'
Избегаем преобразования типов данных
Когда разработчикам нужно объединить число и строку, они обычно применяют функцию str() непосредственно перед выводом данных на экран. Например:
>>> name = "Bob" >>> age = 33 >>> print(name + " is " + str(age) + " years old") Bob is 33 years old
Но гораздо более чистый способ — применять к строкам метод .format() :
>>> print(" is years old".format(name=name, age=age)) Bob is 33 years old
А еще лучше — использовать f-строки (Python 3):
>>> print(f" is years old") Bob is 33 years old