删除注释的C++程序

Mei*_*eir 3 c++ parsing

我正在尝试创建一个程序,该程序接受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);
Run Code Online (Sandbox Code Playgroud)

我的第一个想法是简单地浏览文本,并在(略微改进的)peek()标识/*时执行相当于笔记(徽标引用),并在看到*/时向下笔.当然,在看到它之后它会"直立"直到它达到\n.

这种方法的问题是output.txt不包含任何原始空格或换行符.

这是代码(我在这个阶段甚至没有尝试删除评论):

while (!rFile.eof())
{
rFile>>first;  //first is a char
wFile<<first;
}
Run Code Online (Sandbox Code Playgroud)

那么我尝试用getline()分别获取每行代码,然后在wFile中添加一个endl.它到目前为止工作,但使事情变得更复杂,更不优雅,代码可读性更低.

所以,我想知道是否有人对我有任何指示.(没有双关语!)

NB这是我已经给出的更大的家庭作业的一部分,我仅限于使用C++函数而不是C函数.

Sco*_*ski 5

更新:

其他人提到这一点,但我认为get可能是一个比">>"更好的功能.

原帖:

解决方案是逐个字符地读取输入,而不是使用getline().

您可以使用">>"读取字符,并使用"<<"输出它们.这样你就不必使用"endl"了.行终止符和空格字符将作为单个字符读入.

当您看到注释的开头时,您可以停止输出字符,直到您吃掉相应的注释终止符.

在处理"//"标记的结尾时,还需要确保将"\ r \n"视为单个终止符.