СИ Во всем тексте после каждых трех слов вставить слово "блин"
Дана программа по заданию: "Во всем тексте после каждых трех слов вставить слово "блин"". У меня вышло только вставить слово блин один раз, а должно по всему тексту через 3 слова, дальше не знаю как его вставить. Это форматный ввод и вывод файла txt.
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <string.h>
#include <conio.h>
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
FILE *inf /* *outf */;
char inc[80],outc[120],b[4]="blin";
int pr,spacecount=0,i,j,k,posn=0;
do{
system("cls");
printf("Меню>\n");
printf("1.Открыть файл\n");
printf("2.Обработать файл\n");
printf("3.О программе\n");
printf("0.Выход\n");
pr=getch();
switch(pr)
{
case'1':{
system("cls");
inf=fopen("text.txt","r");
if(inf==NULL)
{ printf("Не удалось открыть файл, попробуйте снова.\n"); getch(); break;}
else
{
fgets(inc,80,inf);
printf("Введенный текстовый файл:\n");
printf("===================================\n");
puts(inc);
printf("===================================\n");
fclose(inf);
}
getch();
}break;
case'2':{
for(i=0;inc[i]!='\0';i++)
{
spacecount+=inc[i]==' '?1:0;
if (spacecount==2) posn=i+2;
if (posn) {
for(j=0;j<=posn;j++) outc[j]=inc[j];
for(j=posn,k=0;j<posn+4;j++,k++) {outc[j]=b[k];}
}
}
outc[j]='\0';
puts(outc);
getch();
}break;
}
} while(pr!='0');
}
Основная обработка здесь:
{
spacecount+=inc[i]==' '?1:0;
if (spacecount==2) posn=i+2;
if (posn) {
for(j=0;j<=posn;j++) outc[j]=inc[j];
for(j=posn,k=0;j<posn+4;j++,k++) {outc[j]=b[k];}
Ответы (1 шт):
Автор решения: JohnDoe
→ Ссылка
b[6]="blin "; // добавлен пробел для более привычного вывода.
...
if (spacecount == 3) { // 3-е слово - это 3-й пробел
posn = i + 2;
}
outc[j++] = inc[i];
if (posn > 0) {
for(k = 0; k < 5; k++) {outc[j++]=b[k];}
// сброс счетчиков до следующих пробелов
posn = 0;
spacecount = 0;
}
}
outc[j]='\0';