2016-12-17 35 views
0

我在C++忽略字符串的所有部分的空间

现在我有功能为机器人编写任何用户说一个文件brain.txt写一个小的聊天机器人程序之前,并把一号码旁边的数字按记录时的顺序排列。继续,输入用户输入Grapefruit将把葡萄柚放在一个新的行上,并将6作为前缀。

0 suspect 
1 interest 
2 underwood 
3 interior 
4 bullet 
5 dog 

我碰到,我需要问题比较的userinput与机器人已经从以前的userinput的内存。

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++; } 

如果userinput是grapefruit机器人的记忆是6 grapefruit ERGO如果它比较这两个对比检查将失败,因为他们是不一样的字符串。

我希望数字仍然是字符串的一部分,并且为了能够选择性地选择部分字符串来读取。我可能会升级到JSON或类似的东西,但现在,这是我想要这样做的方式。

  • 我的第一个问题是,我怎么能忽略所有的字符串,直到后有一个空格?所以我的计划将正确地比较grapefruitgrapefruit代替6 grapefruit

  • 我的第二个问题是,我可以扩展这个功能,这样我可以跳过多个空间只有经过多个空格已通过阅读?

例如,在字符串中 6葡萄柚23 53 12 我要访问的53号,而不是其他。

方法来改善这种方式,我可能做得不正确吗?

我可以在程序启动时将运行时的元组或向量解释为一个向量,并阻止我从文件中进行访问。这是我未来可能做的事情。

+0

读2串并丢弃第一 –

回答

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:非营利组织定义为特殊字符,在这种情况下,意味着没有匹配的字符串结束前找到。

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

+0

这个工作飞驰很好,所以谢谢你,机器人现在的理解是,两者相配,不会再添加字符串到它的brain.txt。 你能详细解释一下string :: npos吗?不知道这是如何工作。 –

+0

但是,你能详细解释一下string :: npos吗?不知道这是如何工作的,我喜欢理解我的代码。 另外,对于未来,你是否知道有什么更好的方法来实现这一点,而不必像这样分割一个字符串? 谢谢。 –

+0

@StrayJay将来,您可以在文件中保留字符串表示形式,但在将其加载到内存中时,请考虑格式化它,以便将该数字存储在单独的字段中。随着您为每条记录添加更多数据点,您可以扩展结构。 –