Нахождение в строке слов,начинающихся на гласную. С++
Как определить начало и конец слова?:confused:
И как узнать гласная буква или согласная?:confused:
если можно пример пожалуйста:o
Нужно срочно!
Как определить начало и конец слова?:confused:
И как узнать гласная буква или согласная?:confused:
если можно пример пожалуйста:o
Нужно срочно!
Гласные - тип звука, при артикуляции которого потоку воздуха не создаётся существенных препятствий, соответственно, нигде над гортанью не создаётся сколько-нибудь существенного воздушного давления.
отсюда - узнать программно - гласная или согласная буква у тебя - не представляется возможным :)
поэтому, используя знания из школьной программы, составляешь массив гласных и массив согласных и проверяешь буквы на вхождения в эти массивы.
по поводу границы слова - если перед/после буквы в слове - не алфавитно-цифровой символ - это конец или начало слова.
Как определить начало и конец слова?:confused:
...
если можно пример пожалуйста:o
Нужно срочно!
Как разбить строку на слова рассматривает Страуструп
vector<string> coll;
string s = "Console Application : ostringstream1 project Overview AppWizard has created this ostringstream1 ...";
string::size_type pos = 0,prev_pos = 0;
while(( pos = s.find_first_of(' ',pos))
!= string::npos )
{
coll.push_back(s.substr(prev_pos,pos - prev_pos));
prev_pos = ++pos;
}
coll.push_back(s.substr(prev_pos,pos - prev_pos));
...
А дальше как squirl сказал.
while(!os.eof()) {
string str;
os >> str;
cout << str << endl;
}
char* str=new char[slen];:o
после того как введена с клавиатуры строка она записывается в массив.
После чего нужно вывести слова начинающиеся с гласной буквы. :confused:
#include <sstream>
using namespace std;
string strVowel = "eyuioaEYUIOA";
int slen = 256;
int main()
{
string str;
char* cStr = new char[slen];
stringstream os;
cin.getline(cStr, slen);
os << cStr;
while(!os.eof()) {
os >> str;
if(strVowel.find(str[0]) != string::npos)
cout << str << endl;
}
}
while(!os.eof()) {
string str;
os >> str;
cout << str << endl;
}
Красивый код, но содержит скрытый баг, который заметен, если, например, в конце строки пробел:
while(!os.eof()) {
string str;
os >> str;
if(str.empty())
str = "bag!";
cout << str << endl;
}
То есть в этом случае создается дополнительная пустая строка, которая также выводится.
- АГА !
:D
Я предложил способ, а не конечное решение.
К вам претензий нет, только размышление на счет алгоритма.
Кстати, в моей доработке (сообщение 6) я эту особенность еще ухудшил, тем, что вынес определение string str за пределы блока while. В моём случае вместо пустой строки 2 раза повторится последнее слово...