我正在尝试创建一个程序,它接受一个 C++ 代码的文本文件并输出另一个 包含该代码的文件,减去它包含的任何注释。
假设rFile和wFile定义如下:
ifstream rFile; // File stream object for read only
ofstream wFile; // File stream object for write only
rFile.open("input.txt", ios::in);
wFile.open("output.txt", ios::out);
我的第一个想法是简单地浏览文本并做相当于笔的操作( Logo 引用)当(稍微改进的)peek() 识别/* 并在看到 */时落笔。当然之后 seeing//它会“起笔”直到它到达\n。
这种方法的问题在于 output.txt 不包含任何 原始空格或换行符。
这是代码(在这个阶段我什至没有尝试删除注释):
while (!rFile.eof())
{
rFile>>first; //first is a char
wFile<<first;
}
然后我尝试使用 getline() 分别获取每一行代码,然后添加 wFile 的结尾。它到目前为止有效,但让事情变得更复杂,更少 优雅且代码可读性差。
所以,我想知道是否有人对我有任何指示。 (没有双关语的意思!)
注意这是我收到的更大的家庭作业的一部分,我 限于仅使用 C++ 函数而不是 C 函数。
最佳答案
更新:
其他人提到过这个,但我认为get
可能是比“>>”更好用的函数。
原帖:
解决方案是逐个字符地读取输入,而不是使用 getline()
。
可以用“>>”读取字符,用“<<”输出。这样你就不必使用“endl”了。行终止符和空格字符将作为单独的字符读入。
当您看到评论的开始时,您可以停止输出字符,直到您吃掉适当的评论终止符。
在处理“//”标记的末尾时,您还需要确保将“\r\n”视为单个终止符。
关于c++ - 删除注释的 C++ 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1023608/