2016-11-04 10 views
0

私はプログラミングの初心者ですが、動作するコードを書きましたが、スケーラブルにすることに興味があります。C++の複数条件IF文をループする方法

次のコードは、ベクターリストの1つの単語が別のベクターリストの単語と一致するかどうかを確認します。

  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'; 

はようvisibile、コードは、単語単位で繰り返すことによって仕事をしていませんので、私は私の第二のベクターリスト内の単語のnubmerを変更した場合、私は、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

この内容はどうですか? ループを追加すると、すべての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

ネストされたループを使用するという原則はこの問題を解決するための合理的な方法ですが、提供したコードは問題のコードと一致しません。 'words [i]'が 'dislike [j]'にマッチしなかったときには 'words [i]'を表示しますが、元のコードは 'words [i]'を出力します。 '嫌いな言葉。 – davmac

+0

@davmacが正しいです。 Capie、これは自分で試したコードですが、それは説明された理由でうまくいきませんでした。 – Newskooler

+0

今はどうですか? 'words' [i]!= dislike [j]'ならば1だけインクリメントする 'count'変数を追加しました。 'count'が' dislike'のサイズと同じ数なら 'words [i]'を出力します – Capie

関連する問題