有四种模式:
1.“*****”,双引号里出现//或者/* */
2.// 的末尾有一个\表示下行也要注释
3./* */
4.正文
代码如下:
#include <iostream>
#include <fstream>
using namespace std;
void StatusChange(ofstream &fout,int &pattern,char &c,char &last)
{
switch(pattern)
{//0-2都要判断这种模式的结束
case 0:
{
fout<<c;
if(c =='"')
pattern = 3;
break;
}
case 1:
{
if(last !='\\' &&c =='\n')//行注释的末尾
{
fout<<c;
c = '\0';
pattern =3;
}
break;
}
case 2:
{
if(last =='*' && c =='/')//段注释的末尾
{
c = '\0';
pattern = 3;
}
break;
}
case 3://由正文部分判断4种模式的开始
{
//fout<<c;
if(c =='"')
{
fout<<c;
pattern = 0;
}
else if(c =='/')
{
if(last =='/')
pattern = 1;
}
else if(c=='*')
{
if(last == '/')
pattern = 2;
}
else
{
if(last =='/')
fout<<last;
fout<<c;
pattern = 3;
}
break;
}
}
last = c;
}
int main()
{
ifstream fin("main1.cpp");
ofstream fout("rst.cpp");
if(!fin)
{
cout<<"no file"<<endl;
return 1;
}
int pattern =3;//0,双引号模式;1,行注释模式,但是要注意\;2,段注释模式;3,其他,也就是正文
char c;
char last='\0';
while (fin.get(c))
{
StatusChange(fout,pattern,c,last);
}
fin.close();
fout.close();
return 0;
}