求一个C++程序,可以去掉C++头文件和源文件中的注释行。

求一个C++程序,可以去掉某目录下所有C++头文件和源文件中的注释行。(或者有这样的现成软件也可以)比如:X:\\某目录下有若干C++的.cpp和.h文件,我希望编一个程... 求一个C++程序,可以去掉某目录下所有C++头文件和源文件中的注释行。(或者有这样的现成软件也可以)
比如:X:\\某目录下有若干C++的.cpp和.h文件,我希望编一个程序实现自动读取每一个源文件和头文件,检测其中的注释行,然后删掉所有的注释行,保存覆盖原来的文件就可以。
为了方便处理,所有的源文件和头文件中注释行都是以//开头的,甚至可以是单独占一行的。
回答者可以给我提供思路,如果写一段示例性代码更好,谢谢。
目的嘛,你懂得,有时候不可控因素(比如领导要求)不得不给别人源代码,但又不想泄漏自己的某些技术,只有通过降低代码的可读性了。
展开
 我来答
百度网友f799d6d9f
2010-11-04 · TA获得超过695个赞
知道小有建树答主
回答量:141
采纳率:100%
帮助的人:78.6万
展开全部
做一个状态机

下面的状态表示:
0: 正在分析
1:读到第一个/
2:读完第二个/,"//...
3:读到 "/*...
4:读到 "/*...*
5:读到第一个"
6:读到字符串里的转义符 "...\
7:找到注释
0和7是等价的状态,但是可以用7状态做些特别的事情,比如这个时候删除刚找到的注释等。最后的程序如下,输入输出还是用C的文件比较方便:

#include "stdio.h"
#include "string"
char fsm[8][128];
void initfsm()
{
const int line_len=sizeof(char)*128;
memset(fsm[0],0,line_len);
memset(fsm[1],0,line_len);
memset(fsm[2],2,line_len);
memset(fsm[3],3,line_len);
memset(fsm[4],3,line_len);
memset(fsm[5],5,line_len);
memset(fsm[6],5,line_len);
memset(fsm[7],0,line_len);
fsm[0]['/']=1;
fsm[0]['"']=5;
fsm[1]['/']=2;
fsm[1]['*']=3;
fsm[1]['"']=5;
fsm[2]['\n']=7;
fsm[3]['*']=4;
fsm[4]['/']=7;
fsm[4]['*']=4;
fsm[5]['"']=0;
fsm[5]['\\']=6;
fsm[7]['/']=1;
fsm[7]['"']=5;
}
int main()
{
int state=0;
char c;
std::string s;
FILE *fin=fopen("e:\\in.txt","r");
FILE *fout=fopen("e:\\out.txt","w");
initfsm();
while(fscanf(fin,"%c",&c)!=EOF)
{
state=fsm[state][c];
s+=c;
switch(state)
{
case 0:
fprintf(fout,"%s",s.c_str());
s="";
break;
case 7:
s="";
if(c=='\n')
{
fputc(c,fout);
}
break;
}
}
fclose(fin);
fclose(fout);
return 0;
}
shen神超
2010-11-03 · 超过14用户采纳过TA的回答
知道答主
回答量:40
采纳率:0%
帮助的人:28.5万
展开全部
一个一个字符读取文件,留下两个字符变量ch1,ch2.
一个存储现在读取的字符,另一个存储前一个字符,
当ch1=='/' && ch2=='/'
即遇到了'//',之后的字符不要了直到换行。
当ch1=='/' && ch2=='*'
即遇到了'/*',之后的字符不要了直到'*/'。
这中间可以用一个while循环实现。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
diyaz
2010-10-30
知道小有建树答主
回答量:48
采纳率:0%
帮助的人:0
展开全部
建立DLL文件,而不是CPP文件。开源的话是保留.h文件
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2010-10-30
展开全部
写伪代码
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式