Удаление всех пробелов в файле - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Разработать программу удаления в тексте, содержащемся в файле, всех пробелов. (язык Си)
у меня как бы есть готовая, но она не до конца, она удаляет пробелы в тексте вводимого с клавиатуры, а мне надо из файла вот она---
#include  <stdio.h>
    #include <string.h>
int main(){
  char s[250];
  int previos=0, i;
  scanf("%s", s);
  for (i = 0; s[i]; ++i){
          if (!(previos && (s[i] == ' '))){
      putchar(s[i]);
      if (s[i] == ' '){
        previos =1;
      }
    }
 
  }
    puts(s);
    }

Решение задачи: «Удаление всех пробелов в файле»

textual
Листинг программы
#include <stdio.h>
#include <string.h>
#include <malloc.h>
 
 
 
int main(void) {
 
    const char* filename = "tmp.txt";  // путь-к существующему файлу
 
    const char* iter;
    long  len = 0L;
    char* buf = NULL;
    FILE* fp  = fopen(filename, "r" );
    if(! fp)
        exit(1);
 
    fseek(fp, 0L, SEEK_END);
    len = ftell(fp);
    fseek(fp, 0L, SEEK_SET);
 
    buf = (char*) malloc((unsigned int)len);
    if(! buf) {
        fclose(fp);
        exit(1);
    }
    fread(buf, (unsigned int)len, 1U, fp);
 
    fp   = freopen(filename, "w+", fp);
    iter = buf;
    while( *iter ) {
        if( *iter != ' ' )
                fputc( *iter, fp);
        *iter++;
    }
    fflush(fp);
    fclose(fp);
 
    free(buf);
    buf = NULL;
 
    getchar();
    return 0;
}

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

  1. Указаны заголовочные файлы, которые подключаются в начале кода:
    • stdio.h - для работы с функциями ввода-вывода;
    • string.h - для работы со строками;
    • malloc.h - для работы с функцией malloc и free.
  2. В функции main указано имя файла, с которым будет производиться работа - tmp.txt.
  3. Создаётся указатель iter, который будет указывать на текущий символ в файле.
  4. Переменная len инициализируется как 0 и будет использоваться для хранения общего количества символов в файле.
  5. Переменная buf инициализируется как NULL и будет использоваться для хранения данных из файла.
  6. Открывается файл с помощью функции fopen с именем tmp.txt, режимом r (чтение). Если файл не открылся, программа завершается с помощью exit(1).
  7. С помощью функции fseek позиция указателя в файле сдвигается в конец файла, чтобы определить его длину.
  8. С помощью функции ftell получается текущая позиция указателя в файле.
  9. С помощью функции fseek позиция указателя в файле сдвигается в начало файла.
  10. С помощью функции malloc выделяется память для хранения данных из файла. Если память не может быть выделена, программа завершается.
  11. С помощью функции fread данные из файла считываются в буфер buf.
  12. Открывается файл с помощью функции fopen с именем tmp.txt, режимом w+ (чтение и запись). Если файл не открылся, программа завершается.
  13. Указатель iter инициализируется как buf.
  14. В цикле while происходит чтение каждого символа из файла. Если символ не равен пробелу ('), он записывается в файл с помощью функции fputc.
  15. После чтения каждого символа, указатель iter увеличивается на 1.
  16. В конце работы программы, файл закрывается с помощью функции fclose.
  17. Выделяемая память освобождается с помощью функции free.
  18. Программа ожидает ввода символа с помощью getchar, чтобы программа не закрылась сразу после завершения работы.
  19. Возвращается 0, что означает успешное завершение программы.
  20. Программа завершается.

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


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

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

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