2016-11-04 333 views
0

我是編程中的新手,我寫了一段可以工作的代碼,但我有興趣使其具有可伸縮性。如何通過C++中的多條件IF語句循環

以下代碼檢查矢量列表中的單個單詞是否與另一個矢量列表中的任何單詞匹配。

  if (words[i] != dislike[0] && words[i] != dislike[1] && words[i] != dislike[2] && words[i] != dislike[3]) //check for disliked words 
       cout << words[i] << '\n'; 

由於都看得到,代碼的功能由字迭代字的工作,所以如果我要改變文字的2-14在我的第二個向量列表,我需要將其添加到IF語句。

是否有更優化的解決方案?我一直試圖弄清楚這幾個小時,但我沒有運氣。 謝謝。

P.S.以下是我的完整代碼。

int main() 
{ 
    // words we dislike 
    vector<string>dislike = { "broccoli", "coke", "potatoes", "water" }; 

    //take input from user 
    vector<string> words; 
    for (string temp; cin >> temp;) // read whitespace-separated words 
     words.push_back(temp); // put into vector 

    //give output 
    cout << "Number of words: " << words.size() << '\n'; 
    //sort(words); // DONT sort the words 
    for (int i = 0; i<words.size(); ++i) //go through your words vector 
    { 
     if (i == 0 || words[i - 1] != words[i])//remove repeating words 
     {   
      if (words[i] != dislike[0] && words[i] != dislike[1] && words[i] != dislike[2] && words[i] != dislike[3]) //check for dislike 
       cout << words[i] << '\n'; 
      else 
       cout << "BlEEP!\n"; //print if word is disliked*/ 
     } 
    } 
    return 0; 
} 
+2

而不是假設'不喜歡'一定大小,也循環它。完成後,只需使用'std :: find'即可。 – StoryTeller

+0

謝謝。 'std :: find'對我來說是新的,所以我會研究並再試一次。 – Newskooler

+0

爲什麼不使用std :: unique? – Dmitriy

回答

0

這是怎麼回事? 添加另一個循環for,它遍歷所有的dislike向量。

int main() 
{ 
    // words we dislike 
    vector<string>dislike = { "broccoli", "coke", "potatoes", "water" }; 

    //take input from user 
    vector<string> words; 
    for (string temp; cin >> temp;) // read whitespace-separated words 
     words.push_back(temp); // put into vector 

    //give output 
    cout << "Number of words: " << words.size() << '\n'; 
    //sort(words); // DONT sort the words 
    for (int i = 0; i<words.size(); ++i) //go through your words vector 
    { 
     if (i == 0 || words[i - 1] != words[i])//remove repeating words 
     {  
      for(int j=0;j<dislike.size();j++) 
      { 
       int count = 0; 
       if (words[i] != dislike[j])count++; 
       if(count == dislike.size())cout << words[i] << '\n'; //check for dislike 
       else 
       cout << "BlEEP!\n"; //print if word is disliked*/ 
      } 
     } 
    } 
    return 0; 
    } 
+0

雖然使用嵌套循環的原則是解決此問題的合理方法,但您提供的代碼與問題中的代碼不匹配。它會在每個時間打印單詞[i]',因爲單詞[i]'不匹配'不喜歡[j]',而原始代碼打印單詞[i]'如果它不匹配'不喜歡'的話。 – davmac

+0

@davmac是正確的。 Capie,這是我自己嘗試的代碼,並且因爲所描述的原因而不起作用。 – Newskooler

+0

現在呢?我只是添加了一個'count'變量,如果'words [i]!= dislike [j]'增加1。如果'count'與'dislike'的大小相同,那麼它會打印'words [i]' – Capie