忽略 space 之前字符串的所有部分
Ignoring ALL parts of a string before a space
我正在用 C++ 编写一个小型聊天机器人程序
现在,我可以让机器人将用户所说的任何内容写入文件 brain.txt
,并在文件中按记住时间的顺序在它旁边放置一个数字。继续,输入用户输入 Grapefruit
会将 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 或类似的东西,但现在,这是我想要的方式。
我的第一个问题是,如何在 space 之前忽略所有字符串?所以我的程序将正确比较 grapefruit
和 grapefruit
而不是 6 grapefruit
我的第二个问题是,我可以扩展此功能以便我可以跳过 multiple spaces 并且仅在 multiple [=54] 之后读取=]s已经过去了?
例如,在字符串中:
6 葡萄柚 23 53 12
我只想访问53号,没有别的。
改进方法以及我可能做错的方法?
我可以在程序启动时将其提升为一个元组向量或运行时的东西,这会阻止我从文件访问。这是我以后可能会做的事情。
如果您的字符串存储在 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 被定义为一个特殊字符,在这种情况下表示在字符串结尾之前没有找到匹配项。
我正在用 C++ 编写一个小型聊天机器人程序
现在,我可以让机器人将用户所说的任何内容写入文件 brain.txt
,并在文件中按记住时间的顺序在它旁边放置一个数字。继续,输入用户输入 Grapefruit
会将 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 或类似的东西,但现在,这是我想要的方式。
我的第一个问题是,如何在 space 之前忽略所有字符串?所以我的程序将正确比较
grapefruit
和grapefruit
而不是6 grapefruit
我的第二个问题是,我可以扩展此功能以便我可以跳过 multiple spaces 并且仅在 multiple [=54] 之后读取=]s已经过去了?
例如,在字符串中: 6 葡萄柚 23 53 12 我只想访问53号,没有别的。
改进方法以及我可能做错的方法?
我可以在程序启动时将其提升为一个元组向量或运行时的东西,这会阻止我从文件访问。这是我以后可能会做的事情。
如果您的字符串存储在 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 被定义为一个特殊字符,在这种情况下表示在字符串结尾之前没有找到匹配项。