首页 > 代码库 > C++去除程序注释实现

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


终端输出