2016-09-15 1 views
-1

回答を含むコードをポストしないでください。私はコードマイスルに到着したい。C++:関数に渡された値を使用して重複の配列をチェックする

私はセットクラスを作成するように求められています。これは、に渡される値に基づいて、重複の配列内の現在の値をチェックする機能を作成することを含む。例えば、

bool set::contains(const value_type& target) const 

は、そのターゲットがセット内にあるチェックすると、かどうかに基づいてtrueまたはfalseを返しますそれは存在しません。この関数は、目標値をセットに挿入する挿入関数でアサートされます。問題?配列を検索して目標値があるかどうかを調べるコードに着きます。

私は私のクラスのために以下の変数を持っている:

data[CAPACITY] //array to store the items, where CAPACITY 
       //is a const storing the maximum number of items in the array 
size_type used //how much of the array is used 

私はループのために、以下を実行しようとしましたし、それが動作しませんでした:

bool set::contains(const value_type& target) const 
{ 
    for (int i = 0; i < used; i++) 
    { 
     if (target == data[i]) 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
    } 
} 

私が表示されますので、私はこれが働くと考えましたどのくらいの配列が使用されているかを調べて、アレイの各インデックスを調べて、ターゲット値を調べます。私は私の主な機能でこのコードをテストするが、印刷された数値は常に0またはNOです。

どのような考えですか?私はそれについてまだ学んでいないので、配列をソートすることはできません。

+1

あなたは配列の最初の値だけをテストします。理由は分かりますか? –

+2

*回答を含むコードは掲載しないでください。私はコードマイソール*に行きたいです - そして、あなたはあなたのコンパイラツールセットに付属のデバッガを使うことを学ぶべきです。そうすることで、あなたのコードに明白なエラーが表示されてしまいます。 – PaulMcKenzie

+0

@PaulMcKenzieよろしくお願いします。それは私が本当に練習すべきスキルです。 – FrakkinShip

答えて

2

ループ内にfalseを戻すのが問題です。セットの最初のアイテムが探しているアイテムと等しくなければ、すぐにfalseを返します。あなたがループを終えるまで待つべきです - あなたがまだ探しているアイテムを見つけていなければ、そこにはないので、falseを返すべきです。

bool set::contains(const value_type& target) const 
{ 
    for (int i = 0; i < used; i++) 
    { 
     if (target == data[i]) 
     { 
      return true; 
     } 
    } 
    return false; 
} 
+0

ありがとうございました – Barmar

関連する問題