用户输入解析关键字C ++

时间:2015-03-02 08:47:54

标签: c++ string parsing alias

我十多年来第一次回到编程中,而且我在C ++中有点生疏。

我决定制作一个zork类型的游戏,该游戏具有基于文本的用户提示,可用于所有玩家操作,但我想解析字符串输入(我使用getline(cin,MyString))来获取关键字并解释用户。我希望有一些别名,以便如果用户键入以下任何一个:是,y,是,Yesir,Yessem,是的,呃,等等,它会将其解释为“是”并且没有巨型案件陈述。我将为多个关键字提供此功能,我希望能够轻松添加更多关键字。

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

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

目前正在考虑这样的事情:

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

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

假设你有一个针对所有可能情况的动作类。

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<std::string, Action*> actionMap

Action* yesAction = new YesAction();
actionMap["yes"] = yesAction;
actionMap["yep"] = yesAction;
actionMap["yeah"] = yesAction;

当您获得用户输入时,使用actionMap.find(userInput)来获取可能的操作,如果它不是actionMap.end()(这意味着没有这样的操作),请调用您获得的Action实例的doAction。

您还希望拥有isValid等函数来检查给定操作是否对YourGame中的当前状态有效。 doAction可以调用YourGame函数,甚至可以更改状态。

答案 1 :(得分:0)

你看过Ternary search tree吗?

实施是here.