Удаление всех пробелов в файле - 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; }
Объяснение кода листинга программы
- Указаны заголовочные файлы, которые подключаются в начале кода:
stdio.h
- для работы с функциями ввода-вывода;string.h
- для работы со строками;malloc.h
- для работы с функциейmalloc
иfree
.
- В функции
main
указано имя файла, с которым будет производиться работа -tmp.txt
. - Создаётся указатель
iter
, который будет указывать на текущий символ в файле. - Переменная
len
инициализируется как 0 и будет использоваться для хранения общего количества символов в файле. - Переменная
buf
инициализируется какNULL
и будет использоваться для хранения данных из файла. - Открывается файл с помощью функции
fopen
с именемtmp.txt
, режимомr
(чтение). Если файл не открылся, программа завершается с помощьюexit(1)
. - С помощью функции
fseek
позиция указателя в файле сдвигается в конец файла, чтобы определить его длину. - С помощью функции
ftell
получается текущая позиция указателя в файле. - С помощью функции
fseek
позиция указателя в файле сдвигается в начало файла. - С помощью функции
malloc
выделяется память для хранения данных из файла. Если память не может быть выделена, программа завершается. - С помощью функции
fread
данные из файла считываются в буферbuf
. - Открывается файл с помощью функции
fopen
с именемtmp.txt
, режимомw+
(чтение и запись). Если файл не открылся, программа завершается. - Указатель
iter
инициализируется какbuf
. - В цикле
while
происходит чтение каждого символа из файла. Если символ не равен пробелу ('
), он записывается в файл с помощью функцииfputc
. - После чтения каждого символа, указатель
iter
увеличивается на 1. - В конце работы программы, файл закрывается с помощью функции
fclose
. - Выделяемая память освобождается с помощью функции
free
. - Программа ожидает ввода символа с помощью
getchar
, чтобы программа не закрылась сразу после завершения работы. - Возвращается 0, что означает успешное завершение программы.
- Программа завершается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д