Преобразовать файл, удалив каждый символ ‘*’ и повторив каждый символ, отличный от ‘*’ - C (СИ)
Формулировка задачи:
Дан текстовый файл. Преобразовать его, удалив каждый символ ‘*’ и повторив каждый символ, отличный от ‘*’.
Решение задачи: «Преобразовать файл, удалив каждый символ ‘*’ и повторив каждый символ, отличный от ‘*’»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> int main(int argc, char* argv[]) { if (argc != 2) { fprintf(stderr, "Udage: %s <FILE>\n", argv[0]); return EXIT_FAILURE; } FILE* fsrc = fopen(argv[1], "r"); if (fsrc == NULL) { perror(argv[1]); return EXIT_FAILURE; } char tmpname[L_tmpnam]; FILE* ftmp = fopen(tmpnam(tmpname), "w"); if (ftmp == NULL) { fclose(fsrc); perror(tmpname); return EXIT_FAILURE; } char ch; while ((ch = fgetc(fsrc)) != EOF) { if (ch != '*') { fprintf(ftmp, "%c%c", ch, ch); } } fclose(ftmp); fclose(fsrc); if (remove(argv[1]) || rename(tmpname, argv[1])) { perror(argv[1]); return EXIT_FAILURE; } return EXIT_SUCCESS; }
Объяснение кода листинга программы
- Указать, что программа написана на языке C.
- Программа принимает на вход один аргумент — имя файла.
- Открыть файл для чтения.
- Если файл не открылся, то выдать сообщение об ошибке и завершить работу программы.
- Создать временный файл для записи результатов.
- Открыть временный файл для записи.
- Если файл не открылся, то закрыть исходный файл, выдать сообщение об ошибке и завершить работу программы.
- Пройти по всем символам исходного файла.
- Если символ не равен '*', то записать его во временный файл дважды.
- Закрыть временный файл.
- Переименовать временный файл в исходное имя файла.
- Если операция переименования не удалась, то выдать сообщение об ошибке и завершить работу программы.
- Вернуть успех.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д