Как перевести число в строку
Перейти к содержимому

Как перевести число в строку

  • автор:

Как перевести число в строку

Нередко в программах встречается ситуация, когда надо преобразовать число в строку или строку в число. Для этой цели в стандартной библиотеке языка С определены функции 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 очень подходит для базового случая рекурсии.

Зная наше основание, можно положить, что алгоритм в целом будет включать три компонента:

  1. Разбить первоначальное число на последовательность из цифр.
  2. Конвертировать каждое из них в строку с помощью поиска.
  3. Слить получившиеся односимвольные строки в одну, которая и будет конечным результатом.

Следующий шаг — это придумать, как изменять состояние и продвигаться в строну базового случая. Поскольку мы работаем с числовыми значениями, то давайте рассмотрим, какие математические операции могут уменьшить число. Наиболее очевидными кандидатами будут деление и вычитание. Хотя последнее может работать, не совсем понятно, что из чего требуется вычитать. А вот деление нацело с получением остатка даёт нам чёткое направление. Давайте посмотрим, что произойдёт, если мы разделим число на основание, по которому пытаемся конвертировать.

Разделив 769 на 10 нацело, получим 76 и 9 в остатке. Это даст нам два хороших результата. Во-первых, остаток меньше нашего основания, следовательно, сразу же может быть преобразован в строку. Во-вторых, у нас есть число, меньшее первоначального и приближающееся к базовому случаю. Теперь нужно перевести в строковое представление 76. Вновь использовав деление нацело, получим 7 и 6 в остатке. Наконец, задача свелась к конвертированию 7, что легко может быть сделано, поскольку удовлетворяет условию \(n < base\) базового случая ( \(base = 10\) ). Последовательность проделанных нами операций проиллюстрирована на рисунке 3. Заметьте, что число, которое мы хотим запомнить, находится в коробочке остатка вдоль правого края диаграммы.

image

Рисунок 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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *