Удалить из текста фразы, содержащие данное слово - C (СИ)

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

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

Дан файл, содержащий некоторый текст. Удалить из него фразы, содержащие слово мама
#include <stdio.h>
#include <stdlib.h>
 
int main(int argc, char *argv[]) {
    FILE *f1,*f2;
    char str[100];
    int i=0,k=0;
    f1=fopen("file1.txt","r");
    if(f1 == NULL)
    {
        puts ("Error");
        system("pause");
        return 1;  
    }
    f2=fopen("file2.txt","a");
    if(f2 == NULL)
    {
        puts ("Error");
        system("pause");
        return 1;  
    }
    
while(!feof(f1))
{ 
  fscanf(f1,"%c",&str[i]);
  if(str[i]=='.')
{
for(i=0;str[i]!='.';i++)
if((str[i]=='Г¬') && (str[i+2]=='Г¬') && (str[i+1]=='Г*') && (str[i+3]=='Г*') && ((str[i+4]=='.')||str[i+4]==' '||str[i+4]==',')) 
{
fprintf(f2,"%c",str[i]);
fprintf(f2,". ");
}
}
}
    fclose(f1);
    fclose(f2);
    getch();
    return 0;
}

Решение задачи: «Удалить из текста фразы, содержащие данное слово»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
 
int main(int argc, char *argv[]) {
    FILE *f1,*f2;
    char str[100];
    int i=0,k=0;
    bool L = false;
    f1=fopen("file1.txt","r");
    if(f1 == NULL)
    {
        puts ("Error");
        system("pause");
        return 1;  
    }
    f2=fopen("file2.txt","w");
    if(f2 == NULL)
    {
        puts ("Error");
        system("pause");
        return 1;  
    }
 
    for(i = 0; i < 100; i++)//очищаем буферную строку
        str[i] = '\0';
    i = 0;
 
    while(!feof(f1))
    { 
        fscanf(f1,"%c",&str[i]);
        if(str[i]=='.')
        {
            for(k=0;str[k]!='.';k++)
                if((str[k]=='м') && (str[k+2]=='м') && (str[k+1]=='а') && (str[k+3]=='а') && ((str[k+4]=='.')||str[k+4]==' '||str[k+4]==',')) 
                {
                    L = true;//используем переменную как флаг, было ли найдено слово в предложении
                }
                if (!L)//если не было найдено ключевое слово пишем предложение в новый файл 
                    fprintf(f2,"%s",str);
                L = false;
                i = 0;
                for(i = 0; i < 100; i++)//очищаем буферную строку
                    str[i] = '\0';
                i = -1;
        }
        i++;
    }
    fclose(f1);
    fclose(f2);
    system("PAUSE");//
    return 0;
}

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

  1. Включаются необходимые заголовочные файлы.
  2. Определяются функции входа и выхода программы.
  3. Создаются два указателя на файлы.
  4. Определяются две буферные строки.
  5. Устанавливаются начальные значения для переменных.
  6. Открываются файлы для чтения и записи.
  7. Осуществляется проверка на успешное открытие файлов.
  8. Файл file1.txt считывается посимвольно с помощью функции fscanf.
  9. Если текущий символ является точкой, то начинается поиск следующего слова ммма.
  10. Если слово ммма найдено, то флаг L становится true.
  11. Если слово ммма не найдено, то предложение записывается в файл file2.txt.
  12. После записи предложения, флаг L сбрасывается в false.
  13. Если в процессе чтения файла file1.txt встречается точка, то все буферные строки очищаются.
  14. После успешного чтения и записи обоих файлов, они закрываются.
  15. Выводится сообщение Press any key to continue....
  16. Возвращается 0, что означает успешное выполнение программы.

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


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

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

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