0

Есть задание: Написать программу, которая считывает английский текст из файла и записывает в другой файл те слова, которые начинаются с гласных букв. Не понимаю как можно реализовать поиск гласной буквы в начале слова. Есть только концепция как все сделать.

#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
    string line;
ifstream in(&quot;D:\\gavno.txt&quot;); // открываем файл для чтения
if (in.is_open())
{
    while (getline(in, line))
    {
        if// Тут по идеи должно быть условие для слов на гласную
            // ну и тут дальше просто запись слова в новый файл
    }
}
in.close();     // закрываем файл

cout &lt;&lt; &quot;End of program&quot; &lt;&lt; endl;
return 0;

}

Harry
  • 221,325
relict
  • 23
  • Насколько знаю, в С++ встроенных функций для определения гласности буквы нет. Т.е. простейшее, что приходит в голову, – создать вектор, вручную накидать в него все гласные, потом брать первую букву слова и проверять, есть ли она в векторе. Есть – гласная, нет – нет. – V-Mor May 28 '21 at 01:39
  • Весь вопрос в том, что такое слово... – Harry May 28 '21 at 04:59

2 Answers2

2

Поскольку точного определения, что такое слово, у вас нет, будем считать, что это просто нечто, отделенное пробельными символами (слово в понимании потоков C++).

Тогда проще всего заменить ваш

while (getline(in, line))
{
    if// Тут по идеи должно быть условие для слов на гласную
        // ну и тут дальше просто запись слова в новый файл
}

на чтение по словам

for(string word; in >> word; )
{
    if (word.find_first_of("AEIOUYaeiouy")==0)
    {
        // Записывать слово word в другой файл
    }
}

Как именно записывать - через пробел, каждое в свою строку и т.д. - это смотрите сами, вам виднее.

Harry
  • 221,325
0

вот я тут накалякал, но потом понял что это не сохранит пробелы и переводы строк

#include <iostream>
#include <bitset>
#include <locale>
#include <fstream>
#include <string>
using namespace std;

int main() { bitset<32>mask("00000001000100000100000100010001"); // ......zyxwvutsrqponmlkjihgfedcba

string word;
ifstream f(&quot;in.txt&quot;);
ofstream g(&quot;out.txt&quot;);

while(!f.eof())
{
    f&gt;&gt;word;
    if(mask[tolower(word[0],locale())-97])
        g&lt;&lt;word&lt;&lt;endl;
}

return 0;

}

не нужно переменную называть in, вроде это имя уже занято