C++去除程序注释实现
红框中为未考虑情况
// test_max.cpp : 定义控制台应用程序的入口点。
//去除文件srcfile中的注释
#include "stdafx.h"
#include <iostream>
#include<string>
#include<fstream>
using namespace std;
int main()
{
string srcfilename;
string dstfilename;
string temp,str,strn;
int a,b;
bool flag=false;
srcfilename="F:\\workspace\\JavaPrj\\test.cpp";
dstfilename="F:\\workspace\\JavaPrj\\test1.cpp";
strn="\n";
ifstream infile(srcfilename.c_str());
ofstream outfile(dstfilename.c_str());
cout<<"文件"<<"\""<<srcfilename<<"\""<<"的注释为:"<<endl;
while(getline(infile,temp))
{
a=temp.find("//");
b=temp.find("/*");
if(flag==false) //不在注释/* */体中
{
if(a==-1 && b==-1)
{
if(temp.find_first_not_of(" ")!=-1 && temp!="") //不为空
{
temp=temp+"\n";
outfile.write(temp.c_str(),temp.length());
}
}
else if(a!=-1 && b!=-1)
{
if(a<b) // //在/*的前面
{
str=temp.substr(a);
temp.assign(temp.c_str(),a);
if(temp.find_first_not_of(" ")!=-1 && temp!="")
{
outfile.write(temp.c_str(),a); //左串写入文档
outfile.write(strn.c_str(),strn.length());
}
cout<<str<<endl; //右串为注释输出
}
else
{
str=temp.substr(b);
temp.assign(temp.c_str(),b);
if(temp.find_first_not_of(" ")!=-1 && temp!="")
{
outfile.write(temp.c_str(),b); //左串写入文档
outfile.write(strn.c_str(),strn.length());
}
cout<<str<<endl; //右串为注释输出
flag=true;
}
}
else if(a!=-1 && b==-1)
{
str=temp.substr(a);
temp.assign(temp.c_str(),a);
if(temp.find_first_not_of(" ")!=-1 && temp!="")
{
outfile.write(temp.c_str(),a); //左串写入文档
outfile.write(strn.c_str(),strn.length());
}
cout<<str<<endl; //右串为注释输出
}
else
{
str=temp.substr(b);
temp.assign(temp.c_str(),b);
if(temp.find_first_not_of(" ")!=-1 && temp!="")
{
outfile.write(temp.c_str(),b); //左串写入文档
outfile.write(strn.c_str(),strn.length());
}
cout<<str<<endl; //右串为注释输出
flag=true;
}
}
else
{
a=temp.find("*/");
if(a==-1)
{
cout<<temp<<endl;
}
else
{
str=temp.substr(a+2);
temp.assign(temp.c_str(),a);
temp=temp+"*/";
if(str.find_first_not_of(" ")!=-1 && str!="")
{
outfile.write(str.c_str(),a); //右串写入文档
outfile.write(strn.c_str(),strn.length());
}
cout<<temp<<endl; //左串为注释输出
flag=false;
}
}
}
system("pause");
return 0;
}
srcfile
dstfile
终端输出
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。