Как выделить слово в командной строке?

В общем, досталось мне задание по C++, в котором нужно прочитать текст из из файла и: Написать программу, которая по нажатию произвольной клавиши поочередно выделяет каждое слово текста, начинающееся на гласную букву. Прочитать текст для меня не проблема, а вот как организовать вторую часть? Подскажите пожалуйста.
2 ответа

Искандер_61, вот набросал для windows на WinAPI.
#include <windows.h>
#include <tchar.h>
#include <stdlib.h>
#include <stdio.h>
#include <locale.h>
#define C_YELLOW  (FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY | BACKGROUND_RED)
#define C_GREEN   (FOREGROUND_GREEN | FOREGROUND_INTENSITY | BACKGROUND_BLUE)
int  select_word(HANDLE hout, COORD& pos, const COORD& scr, WORD color);
WORD read_key(HANDLE hin);
 
int main(void){
    setlocale(LC_ALL, "rus_rus.866");
 
    HANDLE hout = GetStdHandle(STD_OUTPUT_HANDLE);
    HANDLE hin  = GetStdHandle(STD_INPUT_HANDLE);
    if((hout == INVALID_HANDLE_VALUE) || (hin == INVALID_HANDLE_VALUE))
        return EXIT_FAILURE;
 
    CONSOLE_SCREEN_BUFFER_INFO si;
    if(! GetConsoleScreenBufferInfo(hout, &si))
        return EXIT_FAILURE;
 
    //выводим текст для примера
    WCHAR s[] = L"ЯЗЫКИ: APL, ADA, JAVA, ALGOL, LISP, PASCAL, ACTOR.\n"\
                L"картофель, яблоко, огурец, ананас, апельсин, черника.\n"\
                L"ИРИС. ИКРА. Эхо. Кот, Эльбрус, Казбек, Ель, ЁЛКА, КИТ, OCEAN...\n";
    for(int i = 0; i < 2; ++i)
        _putws(s);
    _putws(L"\n\t\t\tКОНЕЦ ИГРЫ");
 
    COORD pos = {0};
    int   ret;
    while(read_key(hin) != VK_ESCAPE){//выход Esc
        ret = select_word(hout, pos, si.dwSize, (rand() % 2) ? C_YELLOW : C_GREEN);
        if(!ret)
            break;
    }
    return EXIT_SUCCESS;
}
 
//выделяет каждое слово текста начинающееся на гласную букву
int select_word(HANDLE hout, COORD& pos, const COORD& scr, WORD color){
    const TCHAR vs[] = _T("AEOYIUaeoyiuАЕЁИОУЭЮЯЫаеёиоуэюяы");
    BOOL  r;
    TCHAR c;
    DWORD n   = 0;
    short i   = 0;
    bool  isv = false;
 
    while(pos.Y < scr.Y){
        r = ReadConsoleOutputCharacter(hout, &c, 1, pos, &n);
        if(!r || !n){
            ++pos.Y;
            pos.X = 0;
            continue;
        }
        OemToCharBuff(&c, &c, 1);
 
        if(IsCharAlpha(c)){
            if(! i)
                isv = (_tcschr(vs, c) != NULL);
            ++i;
        } else if(i > 0){
            if(isv){
                pos.X  -= i;
                FillConsoleOutputAttribute(hout, color, (DWORD)i, pos, &n);
                pos.X  += i;
                return 1;
            }
            i = 0;
        }
        ++pos.X;
    }
    return 0;
}
 
//ожидание нажатие клавиши клавиатуры
WORD read_key(HANDLE hin){
    INPUT_RECORD rs[128];
    DWORD n;
    while(ReadConsoleInput(hin, rs, 128, &n)){
        for(DWORD i = 0; i < n; ++i){
            if((rs[i].EventType == KEY_EVENT) && rs[i].Event.KeyEvent.bKeyDown)
                return rs[i].Event.KeyEvent.wVirtualKeyCode;
        }
    }
    return (WORD)~0;
}


Благодарю!!! Очень сильно выручили!!!