忽略 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 或类似的东西,但现在,这是我想要的方式。

例如,在字符串中: 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 被定义为一个特殊字符,在这种情况下表示在字符串结尾之前没有找到匹配项。

http://en.cppreference.com/w/cpp/string/basic_string/npos