软件公司面试题 用C++或Java删除文件中的注释 我来献丑了
//本文算法思想是对C++注释的分类讨论
//(1) a/b
// (2) //a
// (3) /*a*/
// (4) a*b
//由上述四种情况可以看出在源码中第一次遇到'/'时须分(1),(2),(3)三种情况来讨论,其他均直接输出字符即可。
//一旦第一次发现'/'则继续读入并处理,只需再读入一个字符即可分辨(1),(2)和(3).他们分别是
//'b'一般字符(说明刚才读入的'/'不是注释,应连同刚才的'/'一起输出);
// '/'单行注释的开始(继续读入直到出现换行表示单行注释的结束);
//'*'多行注释的开始(继续读入直到读入'/'表示多行注释的结束,因为C++中注释不允许嵌套。)
//算法如下
#include<iostream>
#include<fstream>
using namespace std;
void main()
{
ifstream fin;
fin.open("main.cpp",ios::in);
fin.seekg(ios::beg);
//get ch1 first and then get ch2
char ch1,ch2;//
//cout<<"a/b=?"<<endl;
//Experiment.........
while(fin.get(ch1))
{
if(ch1=='/')
{
fin.get(ch2);
if(ch2=='/')
{
while(fin.get(ch1))
if(ch1=='/n')
{
cout<<'/n';
break;
}
/*************
Experiment********/
continue;
}
else if(ch2=='*')
{
while(fin.get(ch1))
if(ch1=='/')
break;
continue;
}
else cout<<ch1<<ch2;
}//endif
cout<<ch1;
}//endwhile
fin.close();
}
缺点是留下了空行,请高手指教并改进