Скопировать из одного файла в другой все строки, не содержащие слова, начинающиеся на одну букву - C (СИ)

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

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

1) Скопировать из файла F1 в файл F2 все строки, которые не содержат слова, начинающиеся на одну букву. 2) Найти самое короткое слово в файле F2.(на языке Си)

Решение задачи: «Скопировать из одного файла в другой все строки, не содержащие слова, начинающиеся на одну букву»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <limits.h>
  4. int main()
  5. {
  6.     FILE *fp = fopen("jrk.txt","r");
  7.     FILE *fp1 = fopen("zrk.txt", "w");
  8.     int i;
  9.     char c;
  10.     i = 0;
  11.     int z = 0;
  12.     int k = 0;
  13.     char *v = (char *)malloc(200);
  14.     char r = getchar();
  15.     int flg = 0;
  16.     int m = 0;
  17.     int o;
  18.     while((c = getc(fp)) != EOF) {//Копируем строки в другой файл с учетом условия задачи
  19.         v[k] = c;
  20.         if(isspace(v[k]) || ispunct(v[k]) || v[k] == '\n') {
  21.             o = (m == 0) ? k-z : k-z+1;
  22.             if(v[o] == r) {
  23.                 flg = 1;
  24.             }
  25.             z = 0;
  26.             m++;
  27.         }
  28.         if(c == '\n') {
  29.             v[k] = '\0';
  30.             if(flg == 0) fprintf(fp1,"%s\n", v);
  31.             flg = 0;
  32.             m = 0;
  33.             k = 0;
  34.             z = 0;
  35.             if(v[k] == EOF) break;
  36.             continue;
  37.         }
  38.         k++;
  39.         z++;
  40.     }
  41.     fclose(fp);
  42.     fclose(fp1);
  43.     z = 0;
  44.     m = 0;
  45.     o = 0;
  46.     int min = INT_MAX;
  47.     fp1 = fopen("zrk.txt", "r");
  48.     while((c = getc(fp1)) != EOF) {//Ищем самое короткое слово
  49.         *v = c;
  50.         if(isspace(*v) || ispunct(*v) || *v == '\n' || *v == EOF) {
  51.             if((m == 0) ? z: z-1 < min) {min = (m == 0) ? z : z-1;}
  52.             m++;
  53.             z = 0;
  54.             o++;
  55.         }
  56.         if(*v == '\n') {
  57.             z = 0;
  58.             o = 0;
  59.         }
  60.         ++v;
  61.         z++;
  62.     }
  63.     if(m > 0 ) printf("%d", min);
  64.     else printf("ERROR");
  65. }

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

  1. Включаем необходимые заголовочные файлы для работы с файлами и стандартными вводом-выводом
  2. Открываем файлы jrk.txt и zrk.txt для чтения и записи соответственно
  3. Инициализируем переменные i, c, k, z, m, v, r, flg, o, min и v как указатель на строку
  4. Считаем первый символ из файла jrk.txt и сохраняем его в переменной r
  5. Инициализируем счетчики z, m, o и k равными 0
  6. Пока не достигнем конца файла jrk.txt, считываем каждый символ и сохраняем его в массиве v
  7. Проверяем, является ли текущий символ пробелом, знаком препинания, началом новой строки или концом файла
  8. Если текущий символ является пробелом, знаком препинания или концом строки, то проверяем условие задачи: если следующий символ в строке совпадает с r, то устанавливаем флаг flg равным 1
  9. Если текущий символ является началом новой строки, то записываем строку из массива v в файл zrk.txt, если флаг flg равен 0
  10. Если текущий символ является началом новой строки и флаг flg равен 1, то записываем пустую строку в файл zrk.txt
  11. Если текущий символ является началом новой строки, то сбрасываем счетчики z, m, o и k равными 0
  12. Закрываем файлы jrk.txt и zrk.txt
  13. Открываем файл zrk.txt для чтения
  14. Пока не достигнем конца файла zrk.txt, считываем каждый символ и сохраняем его в массиве v
  15. Проверяем, является ли текущий символ пробелом, знаком препинания, началом новой строки или концом файла
  16. Если текущий символ является пробелом, знаком препинания или концом строки, то проверяем условие задачи: если предыдущий символ в строке является началом новой строки, то обновляем значение min, если длина строки меньше значения min
  17. Если текущий символ является началом новой строки, то сбрасываем счетчики z, m, o и k равными 0
  18. Если длина самой короткой строки в файле zrk.txt больше 0, то выводим ее значение, иначе выводим ERROR

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


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

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

11   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы