在空格

时间:2016-12-17 04:53:12

标签: c++ fstream

我正在用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或类似的东西,但就目前而言,这是我想要这样做的方式。

  • 我的第一个问题是,如何在空格之后忽略所有字符串?所以我的程序会正确地比较grapefruitgrapefruit而不是6 grapefruit

  • 我的第二个问题是,我是否可以扩展此功能,以便我可以跳过多个空格,只有在多个空格通过后才会读取?

例如,在字符串中: 6葡萄柚23 53 12  我想访问数字53,而不是其他任何内容。

如何改进这种方式以及我可能做错的方法?

我可以在程序启动时在运行时提起这个元组或某事的向量,这阻止我从文件中访问。这是我将来可能会做的事情。

1 个答案:

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

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