如何在忽略C ++中的干扰词的同时解析用户输入?

时间:2018-05-05 01:38:26

标签: c++ parsing

我正在尝试用C ++编写一个简单的文本冒险游戏。我希望允许用户输入诸如“GET THE DOG”之类的短语,其中代码会忽略'THE'并且只给我一些重要的东西,比如'GET'和'DOG'。我也希望游戏支持移动,所以另一个短语的例子可能是“移动到左边”,游戏会忽略'TO'和'THE'而只关注'MOVE''LEFT'。

任何人都有关于如何编写函数来做到这一点的任何提示?我一开始以为我可以使用getline,但我认为能够让它工作的唯一方法就是我已经知道了重要词的位置。我的朋友建议使用substr将字符串放入向量中,然后迭代它。但即便如此,我也不太确定如何使用substr来做这样的事情。

谢谢!

    char str[100];
    cin.getline(str,100);
    char* point;
    pint = strtok(str, " ");

    while(piont != NULL){
        cout<<point<<endl;
        point = strtok(NULL, " ");
    }
}

这是我在试图弄清楚如何做到这一点时所分配的东西。我不确定它为什么会起作用,但它做得对。它指向完整的单词,因为无论何时我打印指针,它都会在空格之前打印出来。

1 个答案:

答案 0 :(得分:2)

通常的方法是将输入分成单词(可能在std::vector<std::string>中),并使用集合(可能是std::remove_if)过滤(std:: unordered_set<std::string>)单词"stop words"。然后你可以尝试理解剩下的东西。

从技术上讲,停用词是一个非常常见的单词,在搜索中使用它是没有意义的。我不知道为什么他们被称为“停止词”,但它绝对是通常的术语,你可以用它来找到一些常见的列表。在你看来,并非所有这些都是“噪音”,但我认为你所有的喧闹词都会出现在常用的单词列表中。