Исходный текстовый файл скопировать в результирующий текстовый файл, удалив слова менее N1 символов - C (СИ)
Формулировка задачи:
Не так давно я просил помощь в написании программы на си: Исходный текстовый файл скопировать в результирующий текстовый файл, удалив слова менее N1 символов и более N2 символов. Разделители слов - любое количество пробелов.
Получил вот такой ответ : И все бы хорошо. только мне надо скопировать не слова из файла 1 в файл 2 а весь файл. т.е. если в файле между словами будет 5 пробелов то надо (удалив необходимые слова) скопировать нужные и эти 5 пробелов и т.д., не могли бы вы мне помочь исправить этот код немного?
спасибо.
#include <stdio.h> #include <string.h> #define N1 5 #define N2 1 int main(void) { FILE *ifp, *ofp; char word[4096]; const char *ifname = "in.txt", *ofname = "out.txt"; int wlen; ifp = fopen(ifname, "r"); if(ifp == NULL || (ofp = fopen(ofname, "w")) == NULL) { perror("fopen"); return 1; } while(fscanf(ifp, "%4095s", word) != EOF) { wlen = strlen(word); if(wlen < N1 && wlen > N2) continue; fprintf(ofp, "%s ", word); } fclose(ifp); fclose(ofp); return 0; }
Решение задачи: «Исходный текстовый файл скопировать в результирующий текстовый файл, удалив слова менее N1 символов»
textual
Листинг программы
#include <stdio.h> #include <ctype.h> #define MAXWORD 100 /* максимальная длина слова */ main() { FILE *ifp, *ofp; char word[MAXWORD]; int c; size_t len; enum { N1 = 5, N2 = 20 }; char patt[] = "%99s"; ifp = fopen("ifile", "r"); ofp = fopen("ofile", "w"); if (!(ifp && ofp)) return 1; while ((c = getc(ifp)) != EOF) { if (!isalnum(c)) { putc(c, ofp); continue; } ungetc(c, ifp); fscanf(ifp, patt, word); if ((len = strlen(word)) > N1 && len < N2) ; else fprintf(ofp, "%s", word); } fclose(ifp); fclose(ofp); return 0; }
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы с файлами и строками
- Определение максимальной длины слова и шаблона для форматирования
- Открытие исходного файла для чтения и результирующего файла для записи
- Проверка корректности открытия файлов и выход при ошибке
- Чтение исходного файла посимвольно с помощью функции getc
- Если символ не является буквой или цифрой, то записывается в результирующий файл
- Если длина слова больше N1 и меньше N2, то оно игнорируется
- Если длина слова меньше N1 или больше N2, то оно записывается в результирующий файл
- Закрытие исходного и результирующего файлов
- Выход из программы с результатом выполнения
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д