2010-03-11 105 views
0

我只需要編寫一個函數來計算已打開和正常文本文件中的整數數量。計算文本文件中整數數量的函數?

a。假設存在大量整數除以空格的文本文件

b。編寫一個名爲analyzeFile的函數,該函數接受之前打開的ifstream文件對象作爲參數,並計算文件中整數的數量。

c。它不需要對整數進行任何操作,但它必須精確計算文件中正確的整數個數並將該數字返回給調用的函數 。 d)。它也不需要自己操作文件操作,因此它不需要關閉文件或進行除計數整數 並返回它們的數量以外的任何其他操作。

謝謝你對我的問題的任何幫助!

編輯: 這是我作爲一個函數做遠,是不是,我不知道:

int analizeFile (ifstream &inf, const string &fileName) { 
    int count = 1; 
    int num; 
    fin.open(fileName.c_str()); 
    fin >> num; 
    while (fin.good()) { 
     fin>> num; 
     count ++; 
    } 
    return count; 
} 
+4

向我們展示您編寫的一些代碼。還有你遇到的任何問題。 – dirkgently

+0

是的,請張貼你到目前爲止,以及問題是什麼。否則,你似乎希望我們爲你做功課。 –

+0

這裏是我作爲一個函數做得很遠,是對的,我不知道: int analizeFile(ifstream&inf,const string&fileName) { int count = 1; int num; fin.open(fileName.c_str()); fin >> num; (fin.good()) { fin >> num; while(fin.good()) { fin >> num; count ++; } return count; } – Elaina

回答

2

評論:

int analizeFile (ifstream &inf, const string &fileName) { 

由於計數總是一個非負數量,我寧願使用size_t而不是int。 Nit:您可能需要將該功能的名稱更改爲analyzeFile

int count = 1; 

問題從這裏開始:如果您的文件沒有任何整數,則返回錯誤的結果。

int num; 
    fin.open(fileName.c_str()); 

無需致電open。這通常會由ifstream ctor調用。

fin >> num; 
    while (fin.good()) { 

同樣,這不是必需的。您可以從流中提取並在while條件下進行測試 - 這是更常用的一種。

fin>> num; 
    count ++; 
    } 
    return count; 
} 
+1

+1需要時間和麻煩來教育而不是僅僅發佈解決方案。 – razlebe

+0

是否這篇文章*受過教育* OP是肯定有爭議的。在OP的「課程表」中,我相信一個清晰而簡單的例子會帶來最大的好處。如果OP準備好了解有符號和無符號整數類型和構造函數,那麼從OP的問題就可以看出。看到一個代碼片段,並具有它所做的事情的先驗知識可能會非常有啓發性! – 2010-03-11 03:48:33

+0

更重要的是,'fin.good()'甚至是錯誤的。給定這個文件內容:「21」,那麼如果他將'count'初始化爲'0',他會認爲文件中有'0'數字(因爲如果設置了eof位,'good()'返回false) 。另一方面,如果他將'count'初始化爲'1',並且內容是「21」,那麼他會認爲在讀取21之後有兩個數字,沒有設置eof或失敗位。 –

2

您可以使用功能的做法太

// it was previously opened, so you don't need a filename. 
int analyzeFile (istream &inf) { 
    std::istream_iterator<int> b(inf), e; 
    return std::distance(b, e); 
} 

如果迭代器無法讀取一個整數,這將設置在流故障狀態和將等於結束迭代。然後distance返回達到最終迭代器所花費的迭代步數。

相關問題