Удаление всех пробелов в файле - 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, что означает успешное завершение программы.
- Программа завершается.