Преобразование числа в символьную строку и обратно
Преобразование числа в символьную строку и обратно — это процесс конвертации числовых значений в строковое представление и наоборот. Такой подход позволяет работать с числами в текстовом виде, что необходимо при вводе и выводе данных в программировании.
Основные понятия
- itoa (integer to ASCII) — функция, преобразующая целое число в строку в заданной системе счисления.
- atoi (ASCII to integer) — функция, преобразующая строку в целое число.
- Основание системы счисления — параметр, определяющий систему счисления для преобразования (значения от 2 до 36).
- Буфер вывода — массив символов, в который записывается результат преобразования.
Функции преобразования
Функция 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 преобразует строку, содержащую цифры, в целое число.
Синтаксис:
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 обеспечивают простой способ конвертации, позволяя эффективно работать с данными в различных системах счисления и облегчая взаимодействие между числовыми и строковыми типами данных.




