База знаний для подготовки к ОГЭ и ЕГЭ, проверенная Российской академией наук

Преобразование числа в символьную строку и обратно

Преобразование числа в символьную строку и обратно — это процесс конвертации числовых значений в строковое представление и наоборот. Такой подход позволяет работать с числами в текстовом виде, что необходимо при вводе и выводе данных в программировании.

Основные понятия

  • itoa (integer to ASCII) — функция, преобразующая целое число в строку в заданной системе счисления.
  • atoi (ASCII to integer) — функция, преобразующая строку в целое число.
  • Основание системы счисления — параметр, определяющий систему счисления для преобразования (значения от 2 до 36).
  • Буфер вывода — массив символов, в который записывается результат преобразования.

Функции преобразования

Функция itoa

Функция itoa конвертирует целое число в строковое представление в указанной системе счисления.

Синтаксис:

void itoa(int num, char *buffer, int radix);

Параметры:

  • num — число для преобразования.
  • buffer — указатель на буфер, куда будет записан результат.
  • radix — основание системы счисления (от 2 до 36).

Пример использования:

char buffer[33];
itoa(255, buffer, 16); // Преобразует число 255 в строку "FF" в шестнадцатеричной системе

Алгоритм работы функции:

1. Определить знак числа.

2. Преобразовать число в положительное, если оно отрицательное.

3. В цикле получать остаток от деления на основание системы счисления и сохранять соответствующий символ в буфер.

4. После завершения цикла, если число было отрицательным, добавить знак минус.

5. Завершить строку нуль-символом.

6. Перевернуть строку, так как символы записывались в обратном порядке.

Функция atoi

Функция atoi преобразует строку, содержащую цифры, в целое число.

Синтаксис:

int atoi(const char *str);

Пример использования:

int num = atoi("12345"); // Преобразует строку "12345" в число 12345

Особенности:

  • Игнорирует начальные пробелы.
  • Распознаёт опциональный знак '+' или '-'.
  • Преобразование прекращается при встрече первого нецифрового символа.

Реализация функции itoa

Ниже приведён пример простой реализации функции itoa:

void itoa(int n, char s[], int radix) {
    int i = 0, sign = n;
    if (n < 0) {
        n = -n; // Преобразуем в положительное число
    }
    do {
        int digit = n % radix;
        s[i++] = (digit < 10) ? digit + '0' : digit - 10 + 'A';
    } while ((n /= radix) > 0);
    if (sign < 0) {
        s[i++] = '-';
    }
    s[i] = '\0';
    reverse(s);
}

Функция reverse:

void reverse(char s[]) {
    int i = 0, j = strlen(s) - 1;
    while (i < j) {
        char tmp = s[i];
        s[i++] = s[j];
        s[j--] = tmp;
    }
}

Пояснения:

  • Используется массив символов для накопления результата.
  • Цифры добавляются в буфер в обратном порядке, поэтому в конце необходимо перевернуть строку.
  • Для систем счисления с основанием больше 10 используются буквы латинского алфавита для представления цифр (A=10, B=11 и т.д.).

Применение

Преобразование чисел в строки и обратно широко применяется:

  • При выводе числовых значений на экран или в файлы.
  • При получении чисел из строк, введённых пользователем.
  • В алгоритмах, требующих работы с числовыми данными в текстовом виде.
  • Для сериализации и десериализации данных в различных форматах.

Заключение

Понимание преобразования чисел в строки и обратно является фундаментальным в программировании. Функции itoa и atoi обеспечивают простой способ конвертации, позволяя эффективно работать с данными в различных системах счисления и облегчая взаимодействие между числовыми и строковыми типами данных.