作者Ultor (m(_ _)m)
看板EE_DSnP
標題Re: [請益] linenumber
時間Wed Jun 3 01:02:27 2009
有一個 string 的 getline 滿好用的
是個 global function
可以這樣用
getline(ifstreamObj, stringVar);
>> 補充一下 這個 getline return 的東西
跟 ifstreamObj 的 getline return 的東西一樣
所以也可以用 if ( getline(ifstreamObj, stringVar) ) 來判斷他讀完了沒
如果讀完了 裡面呼叫 void* 的結果就會變成 0
而要隨時知道讀到的 pattern 的 line number
你只需要把原本的
while( ifstreamObj >> pattern )
改成
while( yourRead( ifstreamObj, pattern, lineNum ) )
這個可以是另外寫一個 class, overload 他的 operator ();
他必須要有以下的功能
(1) 在 ifstreamObj 讀完的時候必須 return false
就是說回傳值要跟原本的 ifstreamObj >> pattern 效果一樣
而且也要維持原本 ifstreamObj >> pattern 的功能
(2) 在 ifstreamObj 換行的時候 要把 lineNum++
要怎麼寫,你應該猜得到在這個 class 要有一個暫存的 buffer
這個 buffer 可以是 istringstream
我是覺得滿好用的
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.218.45
1F:推 ric2k1:嗯, 這個建議不錯! 06/03 01:03
※ 編輯: Ultor 來自: 140.112.218.45 (06/03 01:21)
2F:推 of:阿 如果這樣寫的話的確是方便許多 只是我的架構幾乎要整個重寫 06/03 01:23
3F:推 sa901119:請問一下為何我用這個func 傳的參數明明type都對 06/04 21:39
4F:→ sa901119:但compiler就一直說我錯 06/04 21:39
5F:→ sa901119:還specify另一個istream的public member function要我用 06/04 21:40
6F:→ sa901119:這是為什麼啊 = = 06/04 21:40
7F:→ sa901119:但我用dev-c++ 來compile卻會過 結果也正確耶... 06/04 21:40
8F:→ Ultor:要傳 reference 06/04 22:32
9F:→ Ultor:啊 你是說哪個 func? 06/04 22:33
10F:推 sa901119:compiler一直以為我傳的是 inFile.geline(str, num)這個 06/05 01:56
11F:→ sa901119:然後說: invalid conversion from void* to char** 06/05 01:57
12F:→ Ultor:include <string> 看看 ? 06/05 13:02
13F:推 sa901119:我找到原因了 06/05 20:22
14F:→ sa901119:應該是compiler的問題 06/05 20:22
15F:→ sa901119:我用 std::getline 就可以了 = = 06/05 20:22
16F:→ sa901119:謝謝 06/05 20:22