作者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