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

Дать юзеру возможность вводить команды с параметрами - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Перевод из десятичной в двоичную систему http://www.cyberforum.ru/cpp-beginners/thread1223569.html
нужно перевести число из десятичной в двоичную систему! На форуме искал но не подходит! Вот мое творение #include <iostream> using namespace std; void main () { const int N=20; int mas; for (int i=0; i<N; i++) { int n=12, NS = 2, answer, answer1,a,b;
C++ Оставить после знаков препинания только один пробел Прошу помочь с одной программой: #include "stdafx.h" #include <iostream> #include <fstream> #include <iomanip> #include <stdio.h> #include <Windows.h> #include <string> using namespace std; int _tmain (int argc, _TCHAR* argv) http://www.cyberforum.ru/cpp-beginners/thread1223559.html
C++ Определить какие буквы используются чаще, стоящие вначале слова, в середине или в конце?
Код определяет, какая именно из букв повторяется чаще всего во введенном тексте. Как сделать, чтобы определял какие буквы используются чаще, стоящие вначале слова, в середине или в конце? #include <iostream> #include <string> using namespace std; int main() { char str; cout<<"Enter string(less than 100 chars) :\n"; cin.getline(str,100);
Не выполняет ветку if C++
Доброго времени суток. Есть такой код: int main() { setlocale(LC_ALL, "Russian"); float x, E, U = x, Fa = sin(x), Fe = 1 + U; //U = x, Fa = sin(x), Fe = 1 + U int k = 2; char c; do {
C++ Сравнение русских букв с их кодами http://www.cyberforum.ru/cpp-beginners/thread1223527.html
Всем доброго времени суток. Имеется проблема ввода русского языка в консоле(!), при выполнении программы. Суть задания: пользователь вписывает русскую гласную букву и ему возвращается 1 в функции glasn, и эта единица выводится на экран, если же пользователь вписывает любой другой символ, соответственно возвращается и выводится на экран 0. Я использую коды символом в условии, когда проверяю...
C++ Как изменить иконку исполняемого файла Добрый день. Написал игру маленькую, консольную. Решил послать её другу. Но у экзешника не красивая иконка. Долго ползал на форуме тут. Нашёл пару вариантов. Там написано мол добавляете ресурсы. Добавляете иконку. Туда копипастите свою картинку. Затем компилируете. И готово. Ничего к сожалению не помогло. После компиляции иконка не появилась. В место неё появилась стандартная. ... подробнее

Показать сообщение отдельно
DrOffset
6456 / 3830 / 885
Регистрация: 30.01.2014
Сообщений: 6,626
14.07.2014, 21:19     Дать юзеру возможность вводить команды с параметрами
Цитата Сообщение от Vladimir. Посмотреть сообщение
DrOffset, не очень понял, что именно вы имели ввиду, поясните пожалуйста.
Ну примерно что-то такое - на таблицах. Только, естественно, эту нужно будет причесать под задачу. Ну и генерировать таблицы можно и в compile-time, чтобы избежать дублирования и ручного заполнения (но это несколько сложнее).
Можно обойтись и без std::function, слегка повысив производительность, но это этого, ИМХО, код больше потеряет, чем приобретет.
Кликните здесь для просмотра всего текста
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#include <functional>
#include <string>
#include <cstdio>
 
namespace
{
    void do_foo(std::string const & arg)
    {
        printf("do_foo with one arg=\"%s\".\n", arg.c_str());
    }
    void do_foo()
    {
        printf("do_foo with no arg.\n");
    }
    void do_bar(std::string const & arg0, std::string const & arg1)
    {
        printf("do_foo with two args, arg0=\"%s\", arg1=\"%s\"\n", arg0.c_str(), arg1.c_str());
    }
}
 
static const size_t MaxArgs = 5;
 
void call_do_foo(std::string const (&argsStack)[MaxArgs], size_t const & argsCount)
{
    auto unableCall = [&argsCount] { printf("No function with %d args.", argsCount); };
 
    static const std::function<void()> call_table[MaxArgs] =
    {
        std::bind((void(*)())&do_foo)
      , std::bind((void(*)(std::string const &))&do_foo, argsStack[0])
      , std::bind(unableCall)
      , std::bind(unableCall)
      , std::bind(unableCall)
    };
    if(argsCount < MaxArgs)
    {
        call_table[argsCount]();
    }
    else
    {
        unableCall();
    }
}
void call_do_bar(std::string const (&argsStack)[MaxArgs], size_t const & argsCount)
{
    auto unableCall = [&argsCount] { printf("No function with %d args.", argsCount); };
 
    static const std::function<void()> call_table[MaxArgs] =
    {
        unableCall
      , unableCall
      , std::bind((void(*)(std::string const &,std::string const &))&do_bar, argsStack[0], argsStack[1])
      , unableCall
      , unableCall
    };
    if(argsCount < MaxArgs)
    {
        call_table[argsCount]();
    }
    else
    {
        unableCall();
    }
}
 
int main()
{
    typedef struct {
        char const * cmd;
        std::function<void()> function;
    }
    consoleCommand;
 
    std::string argsStack[MaxArgs];
    size_t      argsCount;
    std::string cmd;
 
    static consoleCommand commands[] = {
        { "foo", std::bind(&call_do_foo, std::cref(argsStack), std::cref(argsCount)) },
        { "bar", std::bind(&call_do_bar, std::cref(argsStack), std::cref(argsCount)) }
    };
 
// First test
    cmd = "bar";
    argsStack[0] = "first";
    argsStack[1] = "second";
    argsCount = 2;
 
    for (auto it = std::begin(commands) ; it != std::end(commands); ++it ) {
        if ( !cmd.compare( (*it).cmd)) {
            it->function();
        }
    }
// Second test
    cmd = "foo";
    argsStack[0] = "first";
    argsCount = 1;
 
    for (auto it = std::begin(commands) ; it != std::end(commands); ++it ) {
        if ( !cmd.compare( (*it).cmd)) {
            it->function();
        }
    }
// Third test
    cmd = "foo";
    argsCount = 0;
 
    for (auto it = std::begin(commands) ; it != std::end(commands); ++it ) {
        if ( !cmd.compare( (*it).cmd)) {
            it->function();
        }
    }
// Last test
    cmd = "foo";
    argsCount = 3;
 
    for (auto it = std::begin(commands) ; it != std::end(commands); ++it ) {
        if ( !cmd.compare( (*it).cmd)) {
            it->function();
        }
    }
    return 0;
}
 
Текущее время: 16:37. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru