我的问题是提到我正在进行的任务。似乎有多种方法来处理任务。
我正在编写的程序将是文本文件的过滤器。作业的目的是获得fstream和getline的经验。
要求:
我有一份我写过的程序的工作草案,但是getline在阅读我的文本文件方面有不一致的地方。基本上,它会以字符串形式读取一行,这就是我想要的。正如它在第二行中读到的那样;但是,该程序在该行的中途抛出一个运行时错误,Windows将其关闭。
getline是否有一个填充缓冲区,需要在每行读取后清理?
我的程序伪代码:
我用这种方式实现getline:
getline(fileIN, str1, '.')
str1是从每一行读取的字符串。
我是否正确使用了getline?我是否通过正确有效地思考这个问题?
* 我意识到,当我完成这个扩展的问题/部分时,getline可能会在行的末尾为'\ r'或'\ n'字符使用更多内存,或者出于无关的原因对于记忆,getline没有正确处理(根据我的目的)包裹到新行的句子。 getline不能很好地处理句子/自动换行吗?
另外,有没有办法动态指定getline来读取第一个字符串,直到句号(。)或换行符('\ n'),这是第一个?
感谢您的时间和考虑。
答案 0 :(得分:6)
是的,您正确使用getline
。请务必将其用作while
循环或其他条件的条件:
while(std::getline(fileIN, str1, '.')) {
// process str1
}
并且不要犯这么多其他人试图使用fileIN.good()
或!fileIN.eof()
或其他任何事情的错误(这只会导致头痛和心痛)。
str1
的缓冲区不需要由您清理,因为它由string
类管理。它将根据需要进行扩展,并在变量超出范围时解除分配。这就是为什么我们喜欢标准库类并在使用原始数组之前三思而后的原因之一。
此外,string
的容量没有人为限制。唯一的限制因素是系统的可用内存,因此对于虚拟内存,它在32位系统上可能略低于4GB,或者在64位上略低于2 64 字节系统
答案 1 :(得分:1)