我正在用C ++编写一个小型的聊天机器人程序
现在我有机器人能够将用户所说的任何内容写入文件brain.txt
的功能,并按照记忆时的顺序在文件旁边放置一个数字。继续,输入用户输入Grapefruit
会将葡萄柚放在一个新行上,并以6
作为前缀。
0 suspect
1 interest
2 underwood
3 interior
4 bullet
5 dog
我遇到了一个问题,我需要将用户输入与以前用户输入的已经的内存进行比较。
ifstream brain ("projects/AI/brain.txt");
if (brain.is_open())
{
while ( getline(brain,memory))
{
cout << "memory: " << memory << endl;
cout << "userinput: " << userinput << endl;
if (memory == userinput)
{
exists = true;
//if it exists, tell the user, and break
cout << "I know that already!" << endl;
break;
}
else { filepos++; }
如果用户输入为grapefruit
,则机器人的内存为6 grapefruit
,如果比较这两者,则比较检查将失败,因为它们不是相同的字符串。
我希望数字仍然是字符串的一部分,并且我能够有选择地选择要读取的字符串部分。我可以稍后升级到JSON或类似的东西,但就目前而言,这是我想要这样做的方式。
我的第一个问题是,如何在空格之后忽略所有字符串?所以我的程序会正确地比较grapefruit
和grapefruit
而不是6 grapefruit
我的第二个问题是,我是否可以扩展此功能,以便我可以跳过多个空格,只有在多个空格通过后才会读取?
例如,在字符串中: 6葡萄柚23 53 12 我想访问数字53,而不是其他任何内容。
如何改进这种方式以及我可能做错的方法?
我可以在程序启动时在运行时提起这个元组或某事的向量,这阻止我从文件中访问。这是我将来可能会做的事情。
答案 0 :(得分:0)
如果你的字符串存储在std:string对象中,你可以使用find方法()来确定输入字符串是否包含在内存字符串中。
http://en.cppreference.com/w/cpp/string/basic_string/find
if (memory.find(userinput) != std::string::npos)
{
exists = true;
//if it exists, tell the user, and break
cout << "I know that already!" << endl;
break;
}
std :: string:npos被定义为一个特殊字符,在这种情况下表示在字符串结尾之前未找到匹配项。