软件公司面试题 用C++或Java删除文件中的注释 我来献丑了

本文介绍了一种处理C++源代码中注释的算法,该算法能够区分单行注释、多行注释及普通字符,并通过示例代码详细解释了其实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//本文算法思想是对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();
}

缺点是留下了空行,请高手指教并改进

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值