Программа
/* Вставить в текст заданную строку после каждой строки в которой
заданное слово не обнаружено */
#include <stdio.h>
#include <string.h>
int CheckLetter(char Ch) /* Функция проверки принадлежности символа множеству букв */
{
return 'A'<=Ch && Ch<='Z'||'a'<=Ch && Ch<='z'||
'А'<=Ch && Ch<='Я'||'а'<=Ch && Ch<='п'||'р'<=Ch && Ch<='я';
}
int EOLn(FILE *F, char *Buf) /* Проверка достижения конца строки в файле
и пропуска конца строки */
{
if (*Buf==13) /* Проверка достижения конца строки */
{ *Buf=getc(F); /* Пропуск маркера конца строки */
return 1; /* Определение значения функции "ИСТИННО" */
}
else return *Buf==EOF || *Buf==10;
/* Определение значения функции по маркеру конца файла или строки */
}
void Filter(FILE *Fin, FILE *Fout, char Word[], char Str[]) /* Функция модификации текста */
{
int Coinsidence=0; /* Счетчик совпадений символов строки текста и контрольного слова */
int PushWord=0; /* Флаг пропуска текущего слова */
int InsertString=1; /* Флаг вставки строки */
char Buf; /* Буфер для чтения файла */
while(!feof(Fin)) /* Цикл просмотра файла */
{ do /* Цикл просмотра строки */
{ Buf=getc(Fin); /* Чтение символа из файла */
putc(Buf,Fout); /* Запись символа в файл */
if (CheckLetter(Buf)) /* Проверка принадлежности текущего символа множеству букв */
if ((Word[Coinsidence]==Buf) && (Coinsidence<strlen(Word)) && !PushWord)
/* Проверка совпадения текущего символа с соответствующим символом контрольного слова
и учет режима пропуска слова */
Coinsidence=Coinsidence+1; /* Переопределение счетчика совпадений */
else PushWord=1; /* Подъем флага пропуска слова */
else { if ((Coinsidence==strlen(Word)) && !PushWord) InsertString=0;
/* Проверка условия совпадения последовательности символов
с контрольным словом и сброс флага вставки слова */
Coinsidence=0; /* Сброс счетчика совпадений */
PushWord=0; /* Сброс флага пропуска слова */
}
}
while(!EOLn(Fin,&Buf)); /* Выход из цикла при достижении конца строки */
if (InsertString) /* Проверка флага вставки строки */
{ if (feof(Fin)) fprintf(Fout,"\n"); /* Вставка конца строки после последней
строки при отсутствии маркера конца строки перед концом файла */
fprintf(Fout,"%s\n",Str); /* Вывод в файл вставляемой строки */
}
else InsertString=1; /* Подъем флага вставки строки */
}
}
void main()
{
char FileNameIn[80],FileNameOut[80]; /* Имена входного и выходного файлов */
char Word[129],Str[129]; /* Контрольное слово и вставляемая строка */
FILE *Fin,*Fout; /* Указатели на файлы */
printf("\n"); /* Вывод конца строки */
printf("Введите имя входного файла "); /* Вывод приглашения */
gets(FileNameIn); /* Ввод имени входного файла */
printf("Введите имя выходного файла "); /* Вывод приглашения */
gets(FileNameOut); /* Ввод имени выходного файла */
printf("Введите контрольное слово "); /* Вывод приглашения */
gets(Word); /* Ввод контрольного слова */
printf("Введите вставляемую строку "); /* Вывод приглашения */
gets(Str); /* Ввод вставляемой в текст строки */
Fin=fopen(FileNameIn,"r"); /* Открытие файла для чтения */
Fout=fopen(FileNameOut,"w"); /* Открытие файла для записи */
Filter(Fin,Fout,Word,Str); /* Обработка файлов */
/* Закрытие файлов: */
fclose(Fin);
fclose(Fout);
}
/* Блок-схема функции "main"
***************
* *
* П У С К *
* *
***************
:
: ┌─
: │ Вывод конца строки
***************** │ Вывод приглашения ввода имени входного файла
│ Ввод имени входного файла
* * │ Вывод приглашения ввода имени выходного файла
∙∙∙∙│ Ввод имени выходного файла
* * │ Вывод приглашения ввода контрольного слова
│ Ввод контрольного слова
***************** │ Вывод приглашения ввода вставляемой в текст строки
: │ Ввод вставляемой в текст строки
: └─
:
***************** ┌─
* * │
* * │ Открытие файла для чтения
* *∙∙∙∙│
* * │ Открытие файла для записи
* * │
***************** └─
:
:
***************** ┌─
* * * * │
* * * * │
* * Filter * *∙∙∙∙│ Обработка файлов
* * * * │
* * * * │
***************** └─
:
:
***************** ┌─
* * │
* * │
* *∙∙∙∙│ Закрытие файлов
* * │
* * │
***************** └─
:
:
:
***************
* *
* К О Н Е Ц *
* *
***************
Блок-схема функции "Filter"
***************
* *
* П У С К *
* *
***************
:
:∙∙∙∙∙∙∙∙∙∙∙<∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙<∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙.
: :
*********** ┌─ :
* * │ :
* * Нет │ Проверка :
* *∙∙∙∙∙∙∙.∙∙∙∙│ достижения :
* * : │ конца файла :
* * : │ :
*********** : └─ :
:Да : :
: :∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙<∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙. :
: : : :
: ***************** ┌─ : :
: │ Чтение символа : :
: * * │ из файла : :
: ∙∙∙∙│ : :
: * * │ Запись символа : :
: │ в файл : :
: ***************** └─ : :
: : : :
: * : :
: * * ┌─ : :
: * * │ Проверка : :
: * * Да │ принадлежности : :
: * CheckLetter *∙∙∙∙∙∙.∙∙∙│ текущего : :
: * * : │ символа : :
: * * : │ множеству букв : :
: * * : └─ : :
: * * ┌─ : :
: : Нет * * │ Проверка совпадения : :
: : * * │ текущего символа с : :
: : * * Нет │ соответствующим : :
: : * *∙∙.∙∙│ символом контрольного: :
*************** : * * : │ слова и учет режима : :
* * : * * : │ пропуска слова : :
* К О Н Е Ц * : * * : └─ : :
* * : * : : :
*************** : : Да : : :
: : : : :
: : : : :
: : ***************** ┌─ : :
: : * * │ : :
: : * Coinsidence= * │ Переопреде- : :
: : * *∙∙│ ление : :
: : * Coinsidence+1 * │ счетчика : :
: : * * │ совпадений : :
: : ***************** └─ : :
: : : : :
: : `∙∙∙∙∙∙∙∙∙∙∙. : :
: ***************** ┌─ : : :
: * * │ Подъем : : :
: * * │ флага : : :
: * PushWord=1 *∙∙│ пропуска ; : :
: * * │ слова : : :
: * * │ ; : :
: ***************** └─ : : :
: : : : :
`∙∙∙∙∙∙>∙∙∙∙∙∙∙`∙∙>∙∙∙.∙∙∙∙∙∙∙∙<∙∙∙∙∙∙' : :
: : :
: : :
─┐ *********** : :
│ * * : :
Проверка │ * * Нет : :
достижения │∙∙* EOLn *∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙' :
конца строки │ * * :
│ * * :
─┘ *********** :
: Да :
: :
* :
* * :
* * :
Да * * Нет :
.∙∙∙∙∙∙∙∙∙* InsertString *∙∙∙∙∙∙∙. :
: * * : :
* * * ***************** :
─┐ * * * * * * :
│ * * * * * :
Проверка │ * * Нет * InsertString=1* :
достижения │∙∙* *∙∙∙∙∙∙. * * :
конца │ * * : * * :
файла │ * * : ***************** :
─┘ * * : : :
* : `∙∙∙∙∙∙∙∙∙∙>∙∙∙∙:
: Да : :
: : :
─┐ ***************** : :
│ : :
Вставка │ * * : :
маркера │∙∙∙ : :
конца │ * * : :
строки │ : :
─┘ ***************** : :
: : :
:∙∙∙∙∙<∙∙∙∙∙∙∙∙' :
: :
***************** ┌─ :
│ Вывод :
* * │ в файл :
∙∙∙∙│ вставляемой :
* * │ строки :
│ :
***************** └─ :
: :
`∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙>∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙'
Блок-схема функции "EOLn"
***************
* *
* П У С К *
* *
***************
:
:
*
* * ┌─
* * │
Нет * * Да │ Проверка
.∙∙∙∙∙∙∙∙∙∙∙∙∙∙* *∙∙∙∙∙∙.∙∙∙∙∙∙∙∙∙∙∙∙│ достижения
: * * : │ конца строки
: * * : │
: * * : └─
: * ***************** ┌─
***************** ┌─ │ Пропуск
* * │ Определение * * │ маркера
* *Buf==EOF * │ значения ∙∙∙∙│ конца
* || *∙∙│ функции по * * │ строки
* *Buf==10 * │ маркеру │
* * │ конца файла ***************** └─
***************** │ или строки :
: └─ :
: :
: ***************** ┌─
: * * │ Определение
: * * │ значения
: * 1 *∙∙∙∙│ функции
: * * │ "ИСТИННО"
: * * │
: ***************** └─
: :
`∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙.∙∙∙∙∙∙∙∙∙∙∙∙∙∙'
:
:
***************
* *
* К О Н Е Ц *
* *
***************
Блок-схема функции "CheckLetter"
***************
* *
* П У С К *
* *
***************
:
:
***************** ┌─
* 'A'<=Ch<='Z'||* │
* 'a'<=Ch<='z'||* │ Определение
* 'А'<=Ch<='Я'||*∙∙∙∙│ значения
* 'а'<=Ch<='п'||* │ функции
* 'р'<=Ch<='я' * │
***************** └─
:
:
***************
* *
* К О Н Е Ц *
* *
*************** */
Бесплатные примеры программ
Примеры написанных программ
Помощь студентам по программированию