Удалить из текста фразы, содержащие данное слово - 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;
}
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы.
- Определяются функции входа и выхода программы.
- Создаются два указателя на файлы.
- Определяются две буферные строки.
- Устанавливаются начальные значения для переменных.
- Открываются файлы для чтения и записи.
- Осуществляется проверка на успешное открытие файлов.
- Файл
file1.txtсчитывается посимвольно с помощью функции fscanf. - Если текущий символ является точкой, то начинается поиск следующего слова
ммма. - Если слово
ммманайдено, то флаг L становится true. - Если слово
мммане найдено, то предложение записывается в файлfile2.txt. - После записи предложения, флаг L сбрасывается в false.
- Если в процессе чтения файла
file1.txtвстречается точка, то все буферные строки очищаются. - После успешного чтения и записи обоих файлов, они закрываются.
- Выводится сообщение
Press any key to continue.... - Возвращается 0, что означает успешное выполнение программы.