Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;如何生成基于参数的命令_C++ - Fatal编程技术网

C++ c++;如何生成基于参数的命令

C++ c++;如何生成基于参数的命令,c++,C++,嗨,我现在正在为我的游戏编写练习代码。这个游戏将是一个基于命令的游戏,你可以输入命令来做某些事情。例如,如果您键入;“数学加12”它会加1和2。或者如果你做了;“数学10分5分”它会给你5分。这就是我到目前为止想到的 #include <iostream> #include <string> using namespace std; static string Input; //Define Input int main() { cout << "

嗨,我现在正在为我的游戏编写练习代码。这个游戏将是一个基于命令的游戏,你可以输入命令来做某些事情。例如,如果您键入;“数学加12”它会加1和2。或者如果你做了;“数学10分5分”它会给你5分。这就是我到目前为止想到的

#include <iostream>
#include <string>
using namespace std;

static string Input; //Define Input

int main() {
    cout << "Command ";
    getline(cin, Input);
    if (Input.find("help")) { // Checks If string contains "help"
        if (Input.find("math")){ cout << "\n The math command can be used to do mathimatic equations."; } //if string contains help check if it also contains "math"
        if (Input.find("exit")){ cout << "\n Exits Program."; }
    }

    cin.get();

    return 0; //End Of Main
}

提前感谢,我将进入睡眠模式,我将于明天返回XD

您可以通过创建纯虚拟类
CommandHandler
来实现该功能,例如,每个命令都应该从中派生。使用它,您应该创建
CommandEngine
,以便在其中注册所有处理程序,并最终将命令行的参数提供给它

下面是一个例子:

class CommandHandler
{
    virtual string& const GetCommandName() const = 0;
    virtual void run(const std::vector<string>& argumentList /* or char*[] */) const = 0;
}

/*
This class should parse command line to find and execute appropriate command handler. Of course we should register handlers here before parsing.
*/

class CommandEngine
{
    CommandEngine();
    //Should add handler into array/vector or even better map.
    void registerHandler(CommandHandler handler);
    /* This function should pick first word as command name, find appropriate handler and execute it with remaining arguments*/

    void run(std::vector& const arguments /* or char*[] */);
}

class AddHandler : public CommandHandler
{
   //Implement CommandHandler interface
   ...
}

void main(...argc, argv...)
{
    CommandEngine engine;
    engine.register(AddHandler);
    ....
    engine.run(argv);
}
类命令处理程序
{
虚拟字符串&const GetCommandName()const=0;
虚拟无效运行(const std::vector&argumentList/*或char*[]*/)const=0;
}
/*
此类应解析命令行以查找并执行适当的命令处理程序。当然,在解析之前,我们应该在这里注册处理程序。
*/
类命令引擎
{
命令引擎();
//应该将处理程序添加到数组/向量或更好的映射中。
无效注册表处理程序(CommandHandler);
/*这个函数应该选择第一个单词作为命令名,找到合适的处理程序,并使用剩余的参数执行它*/
void run(std::vector&const arguments/*或char*[]*/);
}
类AddHandler:公共CommandHandler
{
//实现CommandHandler接口
...
}
空干管(…argc,argv…)
{
命令引擎;
引擎寄存器(AddHandler);
....
发动机运转(argv);
}

问题是?你熟悉
开关吗
?你的预期输出是什么?@Bernhard是的,我熟悉开关,但它不是我要找的,因为开关会精确地查找我键入的内容,所以如果我想发出这样的命令;“数学加10 5”它会加10和5。这是无法在交换机中测试的。除非您可以使用switch查找字符串的一部分,否则也可以使用switch。
class CommandHandler
{
    virtual string& const GetCommandName() const = 0;
    virtual void run(const std::vector<string>& argumentList /* or char*[] */) const = 0;
}

/*
This class should parse command line to find and execute appropriate command handler. Of course we should register handlers here before parsing.
*/

class CommandEngine
{
    CommandEngine();
    //Should add handler into array/vector or even better map.
    void registerHandler(CommandHandler handler);
    /* This function should pick first word as command name, find appropriate handler and execute it with remaining arguments*/

    void run(std::vector& const arguments /* or char*[] */);
}

class AddHandler : public CommandHandler
{
   //Implement CommandHandler interface
   ...
}

void main(...argc, argv...)
{
    CommandEngine engine;
    engine.register(AddHandler);
    ....
    engine.run(argv);
}