【发布时间】:2012-01-17 15:23:24
【问题描述】:
我的问题是关于我正在处理的一项任务。似乎有多种方法可以处理任务。
我正在编写的程序将是文本文件的过滤器。作业的目的是获得使用 fstream 和 getline 的经验。
要求:
- 读取一个文本文件(任何可能的方式,不必一次全部读取)
- 写入单独的文本文件(任何可能的方式,可以逐个字符追加或写入)
- 假设每个句子都以句点结尾。
- 每个句子的第一个字母必须大写。
- 除了每个句子的第一个字母之外的所有内容都必须小写。 (也有专有名词 - 这是一个简单的例子)
我有一个我编写的程序的工作草稿,但 getline 读取我的文本文件的方式不一致。基本上,它会将一行作为字符串读取,这就是我想要的。如第二行所述;但是,程序在执行到一半时抛出运行时错误,Windows 将其关闭。
getline 是否有一个缓冲区已填满并需要在每行读取后清理?
我的程序伪代码:
- 使用 getline 从以句点 (.) 停止的第 x 行开始读取字符串。
- 遍历字符串字符,将第一个字母大写,然后将其余字母小写。
- 在文本文件中的最后一个句点 (.) 之后继续读入另一个字符串。
- 重复直到读取文本文件。
- 写入第二个文本文件。
我正在以这种方式实现 getline:
getline(fileIN, str1, '.')
str1 是从每一行读取的字符串。
我是否正确使用 getline?我是否正确有效地思考了这个问题?
* 当我完成这个扩展的问题/部分时,我意识到 getline 可能正在为行尾的 '\r' 或 '\n' 字符使用更多内存,或者出于不相关的原因根据记忆,getline 没有正确处理(根据我的目的)换行的句子。 getline 不能很好地处理句子/自动换行吗?
另外,有没有办法动态指定 getline 以读取第一个字符串,直到句点 (.) 或换行符 ('\n'),哪个先出现?
感谢您的时间和考虑。
【问题讨论】: