Программа c++.
Предыстория. (к прочтению не обязательна) .
В общем такая ситуация. До сиго момента я самостоятельно изучал учебник "Структурное программирование c/c++." Т. А. Павловская Ю. А. Щупак. В итоге дошел до пятого семинара под названием "строки и файлы". И тут я понял, что я не в состоянии разобраться с той теорией, которая дана в практикуме, и преподаватель в институте не оказывает никакой помощи, аргументируя это тем, что пока сам не начнешь программировать - ничему не научишься (не отрицаю, что это правда) .
Но все хочется услышать немного нужной теории в живую.
____________________________________________________________________________
Проблема состоит в следующем: в кратчайшие сроки мне необходимо написать программу.
Условие задачи:
Написать программу, которая считывает английский текст из файла и выводит на экран слова текста, начинающиеся и оканчивающиеся на гласные буквы.
____________________________________________________________________________________
Со считыванием английского текста, я разобрался. Однако никак не могу справиться с отбором слов начинающихся и оканчивающихся на гласную. В идеале, если вы напишите этот фрагмент, так как подсказки не в виде кода до меня туго доходят ибо мои познания в программировании не велики.
Спасибо, что уделили время.
Концептуально так:
- считываем по символу;
- определяем начало и конец слова (встретили букву - если мы сейчас внутри слова, увеличиваем счетчик конца слова или копируем букву в текущее слово, если вне слова - выставляем указатель начала слова и сбрасываем счетчик конца слова и т. д.) ;
- сравниваем первую и последнюю буквы с гласными; самый тупой вариант - что-то вроде
if( c == 'a' || c == 'A' || c== 'e' || c=='E' ||... )
но это очень долго; если посмотришь определения стандартных функций, то поймешь, что
if( strchr("aeiou", tolower(c)) != 0 )
делает то же самое.
Ну а дальше - вроде понятно: если обе буквы гласные, то.. .
Ввод из файла я писать не буду, будет из вводимой с клавиатуры строки.
#include
#include
using namespace std;
int main(){
char str[1000],*w,*p="aAeEiIoOuUyY",*r="\n\t ,;:.!?\r";
cout<<"Enter string:\n"; cin.getline(str,1000); cout<<"\n";
w=strtok(str,r); while(w){
if(strchr(p,w[0])&&strchr(p,w[strlen(w)-1]))cout<<w<<endl; w=strtok(0,r);}
cout<<"\nPress Enter for exit\n"; cin.get();}
Тут я использовал стандартную функцию разбивки строки на слова strtok. В r - символы, которые могут являться разделителями слов, в p - гласные буквы. Съеденные "Ответами" имена заголовочных файлов - iostream и cstring.
#include
#include
//vector words где-то выше
vector vowels {a, e, ..} //гласные
for (auto word : words)
if (find(begin(words), end(words), word) != end(words)
cout << word << endl;
Как-то так.
вот разбирайтесь
http:/ /codeforces .ru/blog/entry/9702