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

求一个C++程序,可以去掉某目录下所有C++头文件和源文件中的注释行。(或者有这样的现成软件也可以)
比如:X:\\某目录下有若干C++的.cpp和.h文件,我希望编一个程序实现自动读取每一个源文件和头文件,检测其中的注释行,然后删掉所有的注释行,保存覆盖原来的文件就可以。
为了方便处理,所有的源文件和头文件中注释行都是以//开头的,甚至可以是单独占一行的。
回答者可以给我提供思路,如果写一段示例性代码更好,谢谢。
目的嘛,你懂得,有时候不可控因素(比如领导要求)不得不给别人源代码,但又不想泄漏自己的某些技术,只有通过降低代码的可读性了。

做一个状态机

下面的状态表示:
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;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-11-03
一个一个字符读取文件,留下两个字符变量ch1,ch2.
一个存储现在读取的字符,另一个存储前一个字符,
当ch1=='/' && ch2=='/'
即遇到了'//',之后的字符不要了直到换行。
当ch1=='/' && ch2=='*'
即遇到了'/*',之后的字符不要了直到'*/'。
这中间可以用一个while循环实现。
第2个回答  2010-10-30
建立DLL文件,而不是CPP文件。开源的话是保留.h文件
第3个回答  2010-10-30
写伪代码

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

如何去除c++文件中的注释
基本思路:1)若\/\/注释找则\/\/及其面部掉 2)若发现\/*则记录位置p1寻找*\/找记录位置p2间内容掉

C++函数头部注释应当写在头文件中还是源文件中?
写在头文件中,这是鼠标放到变量上的提示信息

请问是否有工具能提取出C++程序中cpp文件中的注释?
return note 若超过试用期,系统应该提示并退出\\n 1 2 3 ... ...修改日志:1 V1.0.0 2 V2.0.0 ... ...par 示例:code \/\/ 调用样例 bool blnRet = Test();endcode see deprecated \/ bool CMapApp::Test(){ \/ 1 -1.1 -1.2 -1.3 \/ C++ code ... ...\/ 2 \/ C++ ...

C++中的注释,如\/\/和\/* *\/的注释内容,会参与编译吗?即反编译时会被看到...
不会看到,编译的第一个阶段就已经清除注释了。丰富的数据类型:C语言包含的数据类型广泛,不仅包含有传统的字符型、整型、浮点型、数组类型等数据类型,还具有其他编程语言所不具备的数据类型,其中以指针类型数据使用最为灵活,可以通过编程对各种数据结构进行计算。丰富的运算符:C语言包含34个运算符,它...

C++编程去掉双斜杠注释
程序我给处理了一下,代码如下:依然是ctrl+z 后按下回车结束输入.include <iostream> include <string> include <vector> using namespace std;void main(){ vector<string> input;string::size_type pos = 0;string str;while(getline(cin,str)){ input.push_back(str);} for(int i=0;i<...

...C++中怎样删除一个自己建立的类及与其相关的.h文件和.cpp文件_百...
自己建的类,如果是单独保存*.h和*.cpp,先在FileView选中要删除的文件,再按一下del键,然后就可以在目录下直接删除。如果是和别的类保存一个文件中,直接把class 类名{}; 这样的删除,删除后,编译一下,看看其他的地方有没有引用这个类,再一一删除!

求一个C++的程序 大约在1000行左右的 要求有注释的
求一个C++的程序 大约在1000行左右的 要求有注释的 就是个简单的程序就行最好不要有数据库的因为那个我看不懂就是个简单的程序就行最好不要有数据库的因为那个我看不懂要是传不上来的话就发我邮箱里zjw615@163.com... 就是个简单的程序就行 最好不要有数据库的 因为那个我看不懂就是个简单的程序就...

统计C++源程序中代码行数,注释行数,注释率。
文件读入 如果前两个字符不为“\/\/”或空格则为实际代码 如果前两个字符为“\/\/”则为注释 注释行\/(注释+代码)就是注释率

怎样消除c语言中注释
一般来讲有两种:一是单行注释:直接在该行需要注释的地方加上"\/\/"就行了。例如:"int a,b;\/\/这是一个注释行"。那么,"\/\/"后面的部分"这是一个注释行"就被注释掉了,不起作用,但是"\/\/"前面的“int a,b;"不受影响。另外还有一种是多行同时注释:\/ int a,b;int c,d;\/ 其中"\/*"...

相似回答