Как записать число в строку в обратном порядке? - C (СИ)
Формулировка задачи:
Только начал изучать программирование. Задали задачу. Есть число а = 12389329, есть массив buf[1024]. Надо записать число в массив в виде строки и записать число в файл.
Создал цикл, но проблема в том, что цифры "выходят" в обратном порядке. Что мне сделать дальше? Помогите пожалуйста!
#include <stdio.h>
void main (void)
{
int a = 12389329;
char buf[1024];
while (a > 0)
{
b = a % 10;
a /= 10;
b += 48;Решение задачи: «Как записать число в строку в обратном порядке?»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void inplace_reverse(char * string) {
if (string) {
char * end = string + strlen(string) - 1;
#define XOR_SWAP(a,b) do\
{\
a ^= b;\
b ^= a;\
a ^= b;\
} while (0)
while (string < end) {
XOR_SWAP(*string, *end);
string++;
end--;
}
#undef XOR_SWAP
}
}
void strrev(char *buffer) {
char *temp = buffer;
while(temp && *temp) {
++temp;
}
for(--temp; buffer < temp; ++buffer, --temp)
*buffer = *buffer ^ *temp,
*temp = *buffer ^ *temp,
*buffer = *buffer ^ *temp;
}
int main(void) {
int a = 12389329;
char buf[1024];
sprintf(buf, "%d", a);
printf("Число: %s\n", buf);
strrev(buf);
printf("Число: %s\n", buf);
FILE* fd = fopen("file/number.txt", "w");
if (fd == NULL) {
printf("Ошибка открытия файла!\n");
exit(1);
}
fprintf(fd, "%s\n", buf);
fclose(fd);
return EXIT_SUCCESS;
}
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы: stdio.h, stdlib.h и string.h
- Определяются две функции: inplace_reverse и strrev.
- Функция inplace_reverse принимает указатель на строку и инвертирует её порядок символов. Используется техника XOR_SWAP для обмена символами.
- Функция strrev принимает указатель на строку и переворачивает её. Она сначала находит конец строки, затем начинает обратное перебирание символов и меняет их местами с символами, идущими слева от них.
- В функции main создается переменная a со значением 12389329.
- Создается буферная строка buf размером 1024 символа.
- В строку buf записывается число a, используя функцию sprintf.
- Выводится число в обратном порядке, используя функцию strrev и printf.
- Открывается файл
file/number.txtдля записи, используя функцию fopen. - Если файл не может быть открыт, выводится сообщение об ошибке и программа завершается с кодом ошибки 1.
- В файл записывается число в обратном порядке, используя функцию fprintf.
- Файл закрывается с помощью функции fclose.
- Программа завершается с кодом успеха EXIT_SUCCESS.