首页 > 代码库 > 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
终端输出
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。