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

User Input parsing for keywords C++

本文关键字:输入 用户 C++ 关键字      更新时间:2023-10-16

十多年来,我第一次回到编程领域,对C++有点生疏。

我决定制作一个zork类型的游戏,它为所有玩家的动作提供基于文本的用户提示,但我想解析字符串输入(我使用getline(cin,MyString))中的关键字,并解释用户的愿望。我希望有某种别名,这样,如果用户键入以下任何一个:是,y,是,Yesir,Yessem,是,嗯,等等,它就会将其解释为"是",而不会有一个巨大的case语句。我将为一些关键词提供这个,我想轻松添加更多。

我想让游戏将关键字与文本文件中的关键字列表进行比较,并确定要使用的基本关键字,这样我就可以根据他们的输入确定动作。

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

目前正在研究这样的东西:

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<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函数,甚至可以更改状态。

您看过三元搜索树吗?

这里有一个实现。