Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Передача инкрементирующегося параметра http://www.cyberforum.ru/cpp-beginners/thread1749485.html
Добрый день, подскажите пожалуйста, почему сначала выводится самое большое число. void prt1(int i, int i1, int i2) { cout<<"1. "<<" i = "<<i<<endl<<"2. "<<" i1 = "<<i1<<endl<<"3. "<<" i2 = "<<i2<<endl<<endl; } int main() { int idx = 0;
C++ Динамическая структура Добрый день. Хочу создать примерно такую структуру: struct person { char name, char delimeter, char age, char delimeter, ... }; http://www.cyberforum.ru/cpp-beginners/thread1749461.html
C++ Поиск корней уравнения
Дали задание. Есть уравнение произвольной степени (например, n ). Надо сделать программу, отыскивающую все его корни, включая комплексные. Т.е., задаем вначале степень уравнения, затем его коэффициенты,
C++ Rvalue vector
Как это? vector<int&&> v = {0,0,0};// Это не скомпилируется (Вектор, якобы, хранит rvalue) vector<int> &&rval_vec = v; //Это не скомпилируется (Вектор, якобы, rvalue) Встретил такое определение, как rvalue контейнер, и не понял, что это такое.
C++ Вычислить сумму ряда http://www.cyberforum.ru/cpp-beginners/thread1749424.html
Помогите пожалуйста решить две задачи: 1.Даны вещественные числа x, eps. Вычислить сумму ряда S={∞}E{i=0} (x^(2*i-1))/((2*i-1)!) c погрешностью eps>0.
C++ Написать функцию с переменным числом параметров,находящую количество дней, прошедших между двумя датами Написать функцию days с переменным числом параметров , которая находит количество дней, прошедших между двумя датами (параметрами функции является даты в формате «дд.мм.гг». Написать функцию вызова main , которая обращается к функции days не менее трех раз с количеством параметров 3, 5, 8 . подробнее

Показать сообщение отдельно
Геомеханик
 Аватар для Геомеханик
517 / 324 / 253
Регистрация: 26.06.2015
Сообщений: 738
30.05.2016, 18:35     Как выделить слово в командной строке?
Искандер_61, вот набросал для windows на WinAPI.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#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;
}
 
Текущее время: 23:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru