好吧,伙计们,这个问题整天困扰着我,我似乎找不到解决方案。我知道这是一个很长的帖子,但我会非常感谢你能提供的任何帮助。我正在开发一个聊天机器人程序,该程序从 .dat 文件中读取以填充关键字库。采用面向对象的方法,我定义了一个名为“Keyword”的类,类定义如下所示:
class Keyword
{
public:
//_Word holds keyword
vector<string> _Word;
//_Resp holds strings of responses
vector<string> _Resp;
//_Antymn holds words that are the opposite to keyword
vector<string> _Antymn;
// Constructor
Keyword()
{
// Clears members when new instance created
_Word.clear();
_Resp.clear();
_Antymn.clear();
}
};
因此,每次在 .dat 文件中找到新关键字时,都必须创建 class 关键字的新实例。为了存储关键字的所有这些实例,我创建了另一个向量,但这次是关键字类型并将其称为库:
typedef vector<Keyword> Lib;
Lib library;// this is the same as saying vector<Keyword> library
现在这是我遇到的问题:在用户输入字符串后,我需要检查该字符串是否包含库中的关键字,即我需要查看 _Word 中的字符串是否出现在用户输入中。从您拥有的向量层次结构中查看它:
The top level --> libary //*starting point
--> Keyword
--> _Word
-->"A single string" <-- I want to reference this one
--> _Resp
-->"Many strings"
--> _Antymn
-->"Many strings"
呸!我希望这是有道理的。这是我开始写的代码:
size_t User::findKeyword(Lib *Library)
{
size_t found;
int count = 0;
for(count = 0; count<Library->size(); count++)
{
found = _Input.find(Library->at(count)); // this line needs to reference _Word from each keyword instance within library
if(found!= string.npos)
return found;
}
return 0;
}
我也尝试使用“operator []”方法,但这似乎也没有达到我想要的效果。有谁有想法吗 ?如果做不到,我会非常惊讶。先感谢您。