2016-11-14 5 views
-3

を整数カウント、(例えば)が含まれている "例でを。":C++ - 私は名前の</em> .txtファイル<em>から整数をカウントする.txtファイルから

1 2 3 4 5 
3 6 7 
5 8 
8 9 10 11 

1.とこの場合、私には11を返します(1をカウントする整数 - ユニークな数のカウントのみ)。この時点では、0だけが出力されます(この段階でファイルを開くことに問題があると思います)。

2.プリントアウトのすべての行で唯一の最初の整数を - 1、3、5、8

int integer_count(){ 
int count = 0; 
int i; 
ifstream fin; 
fin.open("Example.in"); //.txt file 

while(fin >> i) 
{ 
    count++; 
} 
fin.close(); 
return count; // In this case it should print 14 instead of 11, 
    because I didn't count out 3, 5 and 8 (which duplicates - haven't figured   
    out how to make unique count that would close eye for duplicates and 
    just count unique integers.) 
} 
+5

デバッガを使って実際に何が読み込まれているのか確認しましたか? –

+0

読み取った要素を、特定の順序に従って固有の要素を格納するコンテナである[set](http://www.cplusplus.com/reference/set/set/)に挿入することができます。次に、あなたはセットのサイズを読みます。 – BugsFree

+0

@AlgirdasPreidžius私はこのようなものにちょっと新しいです。私は2回チェックしましたが、目立つものは何も見ませんでした。プログラムの出力 - 0、合計の状態を開始しています。つまり、おそらくファイルを開くことさえできませんでしたが、なぜですか? – JasonM

答えて

0

ファイルを開くとき、あなたは常にオープン処理が成功したかどうかを確認する必要があります。私はfile_name.good()がそれを行うのに最適なブール関数だと信じています。それはそのように、動作するかどうかのステートメントが見ている場合だけでシンプルに作る:

if(fin.good()) std::cout << "File opened!"; 
else{ //do something when opening didn't work } 

Additioanlly、私は「あなたも、あなたのファイル名が正確であれば、この場合、(「完全なファイル名を」、記述する必要があると考えていますExample.in ")は" Example.in.txt "になります。

ユニークな整数問題については、すでに読み取った整数をファイルに格納するstd::vectorを作成し、別のものを読み込もうとするたびに、すでに読み込まれているかどうかをチェックしてください/ heap/mergeソート+バイナリ検索ではなく、毎回反復処理)。常に新しい整数が追加されたら、countの値を1つ増やしてください。

2番目の解決策は、ベクトルに整数を格納し、反復と消去によって倍数を取り除くことです。その後、countはちょうどyour_vector.size()になります。

"改行を開始する各整数の印刷"は、異なる問題です。私はwhile(fin >> i)からgetline()の機能に切り替えるでしょう。そうすれば、私は各行のファイルを文字列として扱い、整数の行にすることができます。 while()ループでは、新しい行がいつ星になるかわからないので、2番目のタスクを完了することは不可能です(または、タスク1の後にファイルをもう一度開き、すべての行の最初の整数を取得するためにのみ別のアルゴリズムを使用できます)

最後のこと:ここで述べたように、デバッガを使用することを強くお勧めします。それは、コードを1行ずつ調べるだけで、間違っていることを熟考する時間を節約しました。 Codeblocksは本当に良いデバッガを提供していますので、私はcodeblocksデバッガガイドをgoogleにすることをお勧めします。 YouTubeでもそれをカバーするチュートリアルがあります。

関連する問題