2016-12-17 34 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將來,您可以在文件中保留字符串表示形式,但在將其加載到內存中時,請考慮格式化它,以便將該數字存儲在單獨的字段中。隨着您爲每條記錄添加更多數據點,您可以擴展結構。 –