[問題] 請問getline讀檔並儲存的方法

看板C_and_CPP (C/C++)作者 (la8day)時間13年前 (2013/01/24 03:46), 編輯推噓1(1028)
留言29則, 5人參與, 最新討論串1/1
弱弱的問一下,之前只用過C的fopen然後用一個指標 和C++ 直接ifstream infile 然後 while (!infile.eof()) 等這種一次讀字元的 (但ifstream這種寫法 是不是會直接跳過空白和換行字元?) 現在想練習用一下getline來讀檔,如以下 5 4 1 3 2 8 3 類似這種的,每行長度不固定,幾行也不固定 讀檔然後存起來 但是getline一次讀一行,下個迴圈就自動換行 我如果用 char buffer[MAX] ifstream infile("test.txt"); while (!infile.eof()) { infile.getline(buffer,MAX); } 這種寫法雖然可以當下印出來 但該怎麼寫 才能每行分別存起來? 想特別練習一下getline讀檔用法,但搞半天不知道怎麼弄比較合適... 感謝大家 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 175.182.224.51

01/24 03:51, , 1F
怎樣存?
01/24 03:51, 1F

01/24 03:52, , 2F
想說一行就先分別存一個string之後再想辦法
01/24 03:52, 2F

01/24 03:53, , 3F
我比較想不透的是while (!infile.eof()) 不到檔尾不會停
01/24 03:53, 3F

01/24 03:54, , 4F
我該怎麼指定讀到的那行給指定的string
01/24 03:54, 4F

01/24 04:08, , 5F
string str; while(getline(cin, str)) { ... }
01/24 04:08, 5F

01/24 04:10, , 6F
cin 換成 infile 就是讀檔案
01/24 04:10, 6F

01/24 04:26, , 7F
不好意思 請問while(getline(cin, str)) 不也是重複的寫入
01/24 04:26, 7F

01/24 04:27, , 8F
同一個string直到檔尾嗎?還是我認知有誤
01/24 04:27, 8F

01/24 04:31, , 9F
str 是暫時的,你可以用個 STL 容器把它存起來再繼續讀
01/24 04:31, 9F

01/24 04:37, , 10F
呃 對吼 可以用vector的push back來解決
01/24 04:37, 10F

01/24 04:38, , 11F
滿好奇用vector<string> 外 還有什麼簡便的寫法
01/24 04:38, 11F

01/24 04:42, , 12F
那要先知道把每行分別存起來的用途是什麼
01/24 04:42, 12F

01/24 04:45, , 13F
會想用string是因為可能前兩行是要再把數字切出來
01/24 04:45, 13F

01/24 04:45, , 14F
後面卻要使用有字母和數字混合的字串
01/24 04:45, 14F

01/24 04:53, , 15F
那我會建議你先把前兩行處理完,再用迴圈處理後面的資料
01/24 04:53, 15F

01/24 04:58, , 16F
感謝 原來getline會記得自己讀到第幾行
01/24 04:58, 16F

01/24 05:10, , 17F
再問一下 剛剛赫然發現c++的string型別不能用strtok來切
01/24 05:10, 17F

01/24 05:12, , 18F
比方說我想把string"50 5 188" 切成三個整數再存起來
01/24 05:12, 18F

01/24 05:17, , 19F
用stringstream似乎可以 但在迴圈時要決定次數
01/24 05:17, 19F

01/24 05:19, , 20F
可能無法決定要做幾次
01/24 05:19, 20F

01/24 05:20, , 21F

01/24 05:25, , 22F
確實可以~太感謝你了! 雖然我對stringstream的方法還有
01/24 05:25, 22F

01/24 05:26, , 23F
些疑惑...我剛剛試還差一點 不過先睡了ORZ
01/24 05:26, 23F

01/24 05:31, , 24F
而且istringstream只能切空格的樣子
01/24 05:31, 24F

01/24 07:04, , 25F
我是建議若要做比較複雜的parsing直接去找個parser library
01/24 07:04, 25F

01/24 07:04, , 26F
比較好
01/24 07:04, 26F

01/24 15:14, , 27F
另外有查到可先用stringstream ss(str1)
01/24 15:14, 27F

01/24 15:14, , 28F
再用getline(ss ,token ,' ' ) 來切 這樣也可以切逗號
01/24 15:14, 28F

01/24 23:27, , 29F
如果要用strtok的話可以 str.c_str()轉成char *來切
01/24 23:27, 29F
文章代碼(AID): #1H03uPVt (C_and_CPP)
文章代碼(AID): #1H03uPVt (C_and_CPP)