Удалить из строки каждое третье слово - C (СИ)
Формулировка задачи:
Здравствуйте! Нужна помощь в выполнении задания. Задание : необходимо так изменить введенную строку, чтобы каждое 3 слово в ней не входило в выходную строку(=удалялось). Все остальные пробелы и слова остаются на своих местах.
Самостоятельно, долго пытался решить задачу но в итоге не получается. После запуска на исполнение (codebloks) итоговая строка(выходная ) не отличается от введенной. Вот мои наработки
Наверняка ошибка в фрагменте ниже
Здесь я просматриваю все символы введенной строки , и если имеется сочетание (пробел)(непробел) то счетчик "слово" увеличиваю на 1. Если слово становится равным трем, то значит что я нашел начало удаляемого слова "s" , а потом ищу его конец(если он существует) ( первый пробел)- "l".
В фрагменте ниже присваиваю элементы входной строки посимвольно элементам выходной, до "s" , то есть до начала третьего (удаляемого слова), а потом с конца (если есть) третьего (удаляемого слова) слова до конца входной строки.
И как писал выше обе строки одинаковы, слово не удаляется, Помогите пожалуйста!!!!!. Заранее огромное спасибо!
#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;
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"); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д