Преобразовать файл, удалив каждый символ ‘*’ и повторив каждый символ, отличный от ‘*’ - 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.
- Программа принимает на вход один аргумент — имя файла.
- Открыть файл для чтения.
- Если файл не открылся, то выдать сообщение об ошибке и завершить работу программы.
- Создать временный файл для записи результатов.
- Открыть временный файл для записи.
- Если файл не открылся, то закрыть исходный файл, выдать сообщение об ошибке и завершить работу программы.
- Пройти по всем символам исходного файла.
- Если символ не равен '*', то записать его во временный файл дважды.
- Закрыть временный файл.
- Переименовать временный файл в исходное имя файла.
- Если операция переименования не удалась, то выдать сообщение об ошибке и завершить работу программы.
- Вернуть успех.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д