Нужно удалить все слова оканчивающиеся на гласную букву. Подскажите что не так программа, не хочет удалять слово з строки которая заканчивается словом что оканчивается на гласную букву (последнее слово строки). Идет зацикливание программы. Вот код.
| Код | #include "stdafx.h" #include <iostream> #include <string.h> #include <string>
using namespace std;
bool ZnSequence(const char *s) // { if (*s == '!' || *s == ':' || *s == '?' || *s == '.' || *s == ','|| *s == ' ' || *s == '\n') return true; else return false; }
bool TonesLetter(const char *s) // проверяет есть ли символ s гласной буквой { if (*s == 'a' || *s == 'o' || *s == 'y' || *s == 'e' || *s == 'u' || *s == 'i') return true; else return false; }
int main() {
char s[256]; cin.getline(s,255); int i=-1, j=0, k, n=strlen(s);
do { ++i; if (ZnSequence(&s[i])) if (s[i+1] == ' ' || s[i+1] == '\n') // проверяем есть ли следующий симлол пробелом или символом окончания { i+=1; // если да то увеличиваем длинну слова что будем удалять удаляем все символи до пробела if (TonesLetter(&s[i-2])) { if (s[i]!='\n') { k=i-j; n-=k; for (int a=j; a<n;a++) { s[a]=s[a+k+1]; } s[n]='\n'; i=j; } else { s[j]='\n'; // если нет то присваиваем началу нашего слова символ конца строки i=j; } } else j=i+1; // переходим к началу нового слова } else { if (TonesLetter(&s[i-1])) // проверяем конец слова { if (s[i]!='\n') // проверяем конец строки или нет { k=i-j; n-=k; for (int a=j; a<n;a++) { s[a]=s[a+k+1]; } s[n]='\n'; i=j; } else { s[j]='\n'; i=j; } } else j=i+1; // переходим к началу нового слова } } while (s[i]!='\n');
cout << s; system("pause"); return 0; }
|
|