[問題] 有關於從檔案讀入字串的問題

看板C_and_CPP (C/C++)作者 (忘水)時間15年前 (2010/11/08 20:08), 編輯推噓0(0018)
留言18則, 4人參與, 最新討論串1/1
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 ) ( 未必需要依照此格式,文章條理清楚即可 ) 遇到的問題: (題意請描述清楚) 得不出想要的結果QQ 希望得到的正確結果: 我希望從檔案一行行讀入字串,用空格切割過後然後印出 程式跑出來的錯誤結果: 顯示不出來ˊˋ 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) codeblocks 有問題的code: (請善用置底文標色功能) 我的code在這邊 string str; string token; stringstream ss; ifstream fin; fin.open("input.txt"); while(!fin.eof()) { getline(fin,str); ss.str(str); //我在想是不是這邊有錯... for (;;) // 以空格將字串分開 { 並且印出 getline(ss,token, ' '); if(ss.fail()) break; cout<<token<<endl; } } fin.close(); code沒有列出全部 想請問版上各位 code哪裡出了錯誤... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.116.101.137

11/08 20:17, , 1F
以空白切割的話… http://nopaste.csie.org/d2e39 試試?
11/08 20:17, 1F

11/08 20:21, , 2F
喔喔 我是要讀取一行 將那行字串按照空格分開然後印出
11/08 20:21, 2F

11/08 20:21, , 3F
然後換下一行這樣@@
11/08 20:21, 3F

11/08 20:26, , 4F
在for迴圈結束後的大括號下加上ss.clear()
11/08 20:26, 4F

11/08 20:28, , 5F
11/08 20:28, 5F
看到樓上大大的code, 我又有新問題了XD 看到 while (!fin.eof()) { stringstream ss; <<這樣每跑一次迴圈就宣告會不會有問題啊@@? string str; getline(fin, str); ss.str(str); while (!ss.eof()) { string token; ss >> token; cout << token << endl; } ※ 編輯: marvyuh 來自: 140.116.101.137 (11/08 20:33)

11/08 20:37, , 6F
把你的物件 life time 縮短就可以了, 把 sstream 擺在
11/08 20:37, 6F

11/08 20:38, , 7F
迴圈裏面, 可以省掉很多因為你想加快速度而造成的共用
11/08 20:38, 7F

11/08 20:38, , 8F
問題, 每個迴圈都建立一個新的物件, 除非該物件要初始
11/08 20:38, 8F

11/08 20:39, , 9F
化的成員很多, 不然這樣子時間上來講根本沒有差很多,
11/08 20:39, 9F

11/08 20:40, , 10F
真正的瓶頸是在你無法避免的 ss.str(str); 這行, 想
11/08 20:40, 10F

11/08 20:41, , 11F
要共用物件的話, 就變成 C 程式了
11/08 20:41, 11F

11/08 20:46, , 12F
哦哦 原來...
11/08 20:46, 12F

11/08 20:47, , 13F
你的程式沒有善用建構子提供的功能, 像是開檔可以寫成
11/08 20:47, 13F

11/08 20:47, , 14F
istream fin("input.txt"); 有些物件要嘛開成功才存在
11/08 20:47, 14F

11/08 20:48, , 15F
要嘛就開檔時連建構都失敗, 物件在錯誤的狀態下容易寫
11/08 20:48, 15F

11/08 20:49, , 16F
出錯誤的程式碼, 一個物件的存活先決條件是: 他的資源
11/08 20:49, 16F

11/08 20:49, , 17F
都要是可用的, 不然在你 fin.open("input.txt"); 之前
11/08 20:49, 17F

11/08 20:50, , 18F
想加什麼程式碼搞壞你的程式都可以
11/08 20:50, 18F
文章代碼(AID): #1Cr-XBSk (C_and_CPP)
文章代碼(AID): #1Cr-XBSk (C_and_CPP)