Преобразовать файл, удалив каждый символ ‘*’ и повторив каждый символ, отличный от ‘*’ - 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;
}

Объяснение кода листинга программы

  1. Указать, что программа написана на языке C.
  2. Программа принимает на вход один аргумент — имя файла.
  3. Открыть файл для чтения.
  4. Если файл не открылся, то выдать сообщение об ошибке и завершить работу программы.
  5. Создать временный файл для записи результатов.
  6. Открыть временный файл для записи.
  7. Если файл не открылся, то закрыть исходный файл, выдать сообщение об ошибке и завершить работу программы.
  8. Пройти по всем символам исходного файла.
  9. Если символ не равен '*', то записать его во временный файл дважды.
  10. Закрыть временный файл.
  11. Переименовать временный файл в исходное имя файла.
  12. Если операция переименования не удалась, то выдать сообщение об ошибке и завершить работу программы.
  13. Вернуть успех.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.167 из 5
Похожие ответы