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

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

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

Здравствуйте! Нужна помощь в выполнении задания. Задание : необходимо так изменить введенную строку, чтобы каждое 3 слово в ней не входило в выходную строку(=удалялось). Все остальные пробелы и слова остаются на своих местах. Самостоятельно, долго пытался решить задачу но в итоге не получается. После запуска на исполнение (codebloks) итоговая строка(выходная ) не отличается от введенной. Вот мои наработки
#include <stdio.h>
#include <stdlib.h>
 
int main() {
 
char is[200];
char os[200];
printf("Vhodnaja stroka =");
gets(is);
printf("Vhodnaja stroka =%s \n", is);
int i,j,k,slovo,l,s,z;
for(i=-1,k=0;is[i]!=0;i++,k++){
 
    if(((is[i]==' ') && (is[i+1]!=' '))) {
       for(slovo=0;slovo<4;slovo++){};
         if(slovo==3) {
           s=k;
           for(i=k,z=k;is[i]!=0; i++,z++) {
              if(is[i]==' ') { l=0;
                l=l+z; break;
           }
        }
    }

}
}
 
for(i=0,j=0;i!=s;i++,j++){
os[j]=is[i];
    }
 
if (l!=0) {
   for(i=l,j=l;is[i]!=0;i++,j++) {
   os[j]=is[i];
   }
}
os[j]=0;
printf("Vihodnaja stroka =%s \n", os);
 
}
Наверняка ошибка в фрагменте ниже
for(i=-1,k=0;is[i]!=0;i++,k++){
 
    if(((is[i]==' ') && (is[i+1]!=' '))) {
       for(slovo=0;slovo<4;slovo++){};
         if(slovo==3) {
           s=k;
           for(i=k,z=k;is[i]!=0; i++,z++) {
              if(is[i]==' ') { l=0;
                l=l+z; break;
Здесь я просматриваю все символы введенной строки , и если имеется сочетание (пробел)(непробел) то счетчик "слово" увеличиваю на 1. Если слово становится равным трем, то значит что я нашел начало удаляемого слова "s" , а потом ищу его конец(если он существует) ( первый пробел)- "l". В фрагменте ниже присваиваю элементы входной строки посимвольно элементам выходной, до "s" , то есть до начала третьего (удаляемого слова), а потом с конца (если есть) третьего (удаляемого слова) слова до конца входной строки.
for(i=0,j=0;i!=s;i++,j++){
os[j]=is[i];
    }
 
if (l!=0) {
   for(i=l,j=l;is[i]!=0;i++,j++) {
   os[j]=is[i];
   }
}
os[j]=0;
И как писал выше обе строки одинаковы, слово не удаляется, Помогите пожалуйста!!!!!. Заранее огромное спасибо!

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

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
 
int main() {
 
   char is[200];
   char os[200], *ops = os, *ps  = is;
   printf("Vhodnaja stroka =  ");
   gets(is);  
   size_t slovo = 1, cut = 0;
 
while(*ps){
 
         if(!cut)
         {
            *(ops++) = *ps;
         }
    
    if(isalpha(*ps) && !isalpha(*(ps + 1))) 
      {
          cut = 0; slovo++;
      }
         if(slovo % 3 == 0) 
             if(isalpha(*(ps + 1)))
             {
             cut = 1; 
             }  
      ps++;
}
    *ops = '\0';
 
printf("Vihodnaja stroka =  %s \n", os);
 
 system("pause");
 
}

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

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