[問題] C++_動態陣列_讀檔

作者: redonizuka (R大)   2014-08-13 10:14:38
開發平台(Platform): QtCreator
問題(Question):利用動態陣列讀檔是否有達到動態效果? 以及如何驗證?
餵入的資料(Input): .txt
1 10
100 200
201 210
900 1000
預期的正確結果(Expected Output):
1 10
100 200
201 210
900 1000
錯誤結果(Wrong Output): None
程式碼(Code):(請善用置底文網頁, 記得排版)
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
fstream file;
char *buffer = new char[300];
file.open("C:\\Users\\redon_000\\Desktop\\QT\\Uva_3n_add_1\\TestFile.txt",ios::in);
if(!file)
cout <<"The file didn't open"<<endl;
else
{
file.read(buffer,300);
cout <<buffer<<endl;
file.close();
}
delete [] buffer;
return(0);
}
補充說明(Supplement): 目前初學C++,依照書本上的讀檔,
是宣告一個死的陣列給他,但我想學習如何運用動態陣列,上面是讀整個檔案
若此問題解決,依行讀取也使用動態陣列,在記憶體配置上會來的有效率,
認真想學習,謝謝大家。
作者: redonizuka (R大)   2014-08-13 10:15:00
首先想知道這樣的寫法是有達到動態陣列嗎?
作者: gride2 (CK)   2014-08-13 11:15:00
file.tellg(), then new char[xxx].
作者: redonizuka (R大)   2014-08-13 11:48:00
如果使用了file.tellg(),這樣的話其實也不用動態了因為她就直接回傳你資料長度了吧,除非你要分行讀這樣的解釋不知是對是錯?
作者: lNishan (紫小霓)   2014-08-13 12:43:00
這問題用動態陣列沒意義如果你要memory efficient,一個一個字元讀+輸出就行了如果一行一行讀,程式執行中占用最大的記憶體是sizeof(char)*(最長的字串長度+1)如果已知最長是300,你就直接開300就好不斷使用new、delete反而會消耗額外時間
作者: redonizuka (R大)   2014-08-13 12:52:00
lN大,若一行一行讀的話我也要先定義BUFFER的大小目前我已知的file.tellg()可知整份文件的長度但要取得最長字串的長度,有更明顯的提示嗎?我認同你上述的說法,若300那數字能在自動一點我就可以通用於任何TXT文件,請求指教
作者: lNishan (紫小霓)   2014-08-13 13:05:00
那你就每次都讀一個character就好如果題目需要分行,那就用迴圈讀到換行字元通常這類訊息(eg. 字串最長多少) 問題都會specify出來或是你寫好程式,自己Specify出來
作者: gride2 (CK)   2014-08-13 13:40:00
我不太清楚你的真正目的為何? 如果單純要輸出每行可使用getline(),再cout出去就好如果照你說的你也不知道每行長度為多少一直使用new/delete,只要你不會memory leak又不怕費時因為我一直以為你想要知道長度...所以前面就回那些..
作者: bibo9901 (function(){})()   2014-08-13 15:14:00
不曉得你的"自動取得"指的是什麼?
作者: gride2 (CK)   2014-08-13 15:17:00
getline()可以用string吧?
作者: bibo9901 (function(){})()   2014-08-13 15:17:00
因為不可能預知檔案的一行有多少字元, 所以你如果不喜歡在編譯時決定長度, 就只能在執行的時候邊讀取邊調整了,getline + string + shink_to_fit 應該很滿足你的需求
作者: gride2 (CK)   2014-08-13 15:23:00
如果以你這個方向,面對未知長度,我習慣是先用char *buf不過看你的code也沒有要去變更buffer[n]的值,單純的輸出其實使用getline(file,string)即可,不要限制在buffer[x]頂多很多此一舉的就是string讀完後,再依據string的lenth去宣告char buffer的size
作者: redonizuka (R大)   2014-08-15 18:22:00
OK,了解,感謝大家,我受益良多

Links booklink

Contact Us: admin [ a t ] ucptt.com