关键字C+的用户输入解析+; 我在十多年来第一次回到编程中,我在C++中有点生疏了。

关键字C+的用户输入解析+; 我在十多年来第一次回到编程中,我在C++中有点生疏了。,c++,string,parsing,alias,C++,String,Parsing,Alias,我决定制作一个zork类型的游戏,它有一个基于文本的用户提示,用于所有玩家的操作,但我想解析字符串输入(我使用getline(cin,MyString))作为关键字,并解释用户的愿望。我希望有某种别名,这样如果用户输入以下任何一种:是的,y,是的,是的,先生,是的,嗯,等等,它将解释为“是”,而不是有一个巨大的案例陈述。我将有一些关键字,我想很容易地添加更多 我希望让游戏将关键字与文本文件中的关键字列表进行比较,并确定要使用的基本关键字,以便我可以根据它们的输入确定操作 是否有任何已建立的库或实

我决定制作一个zork类型的游戏,它有一个基于文本的用户提示,用于所有玩家的操作,但我想解析字符串输入(我使用getline(cin,MyString))作为关键字,并解释用户的愿望。我希望有某种别名,这样如果用户输入以下任何一种:是的,y,是的,是的,先生,是的,嗯,等等,它将解释为“是”,而不是有一个巨大的案例陈述。我将有一些关键字,我想很容易地添加更多

我希望让游戏将关键字与文本文件中的关键字列表进行比较,并确定要使用的基本关键字,以便我可以根据它们的输入确定操作

是否有任何已建立的库或实践可用于此功能

目前,我们正在研究以下内容:

Get user input
Check user input for keywords
Put each keyword into a class
assign class variable for the alias aka Keyword.type()="yes" or Keyword.type()="north"
Perform action based on keywords

任何帮助都将不胜感激。

假设您有一个针对所有可能情况的行动课程

class Action
{
public:
    virtual void doAction(YourGame*)=0;
};

class YesAction : public Action
{
public:
    void doAction(YourGame* game) {/* your yes logic */}
};
class NoAction : public Action
{
public:
    void doAction(YourGame* game) {/* your no logic */}
};
然后,在你的
YourGame
中,有一个
std::map actionMap

Action* yesAction = new YesAction();
actionMap["yes"] = yesAction;
actionMap["yep"] = yesAction;
actionMap["yeah"] = yesAction;
当您获得用户输入时,使用
actionMap.find(userInput)
获得可能的操作,如果不是
actionMap.end()
(这意味着没有这样的操作),则调用您获得的操作实例的doAction

您还需要使用诸如
isValid
之类的函数来检查给定的操作对于
YourGame
中的当前状态是否有效。doAction可能会调用游戏函数,甚至改变状态。

你看过吗

一个实现是