C++_homework_EraseComment
顾名思义就是删除程序中的注释,不清楚fsm的机制,完全是自己的思路做。
开头先读取一个字符确定是否到文件结尾,如果读取成功,是换行的话就换行,并继续读取,不是的话,用putback放回缓冲区,并整行读取。
有两个状态开关(bool 0为关),相互制约,state开时,说明已经遇到/*,要遇到*/才会关闭,flag开时,说明遇到",再遇到"才会关闭接下来均是字符串内容,不用考虑注释。
state开时,posa表示/*的/的位置,如果一行结束也没有遇到*/,那么从/*开始删除到结束,并且将posa赋值0。下一行时同样操作。
#include <iostream>
#include <string>
#include <fstream>
using namespace std; int main(int argc,char* argv[])
{
ifstream fin;
ofstream fout;
fin.open(argv[]);
fout.open(argv[]);
char c;
bool flag=,state=;
int posa=-,posb=-;
while(fin.get(c)){
if(c=='\n') fout<<endl;
else{
fin.putback(c);
string ss;
getline(fin,ss); for(int i=;i<ss.size();i++){
if(state==false){
if(ss[i]=='"'){
if(flag==) flag=true;
else flag=false;
} if(flag==&&ss[i]=='/'){
if(ss[i+]=='/')
ss.erase(i,ss.size()-i);
if(state==false&&ss[i+]=='*'){
posa=i;
state=true;
}
} }
if(state==true&&ss[i]=='*'){
if(ss[i+]=='/'){
posb=i+;
state=false;
}
}
} if(state==true){
ss.erase(posa,ss.size()-posa);
posa=;
}
else if(state==false&&ss.size()&&posa!=-){
ss.erase(posa,posb-posa+);
posa=posb=-;
} fout<<ss<<endl;
} }
fout.close();
fin.close();
return ;
}
关于文件操作和Ubuntu常用命令和argc&argv的问题,(可能会)另开一篇讲。
C++_homework_EraseComment的更多相关文章
随机推荐
- PHP 之ip查询接口
/** * @param $ip 待查询的ip * @return mixed */ function getIpAddressInfo($ip) { $ipurl = 'http://api.ip1 ...
- java aop面向切面编程
最近一直在学java的spring boot,一直没有弄明白aop面向切面编程是什么意思.看到一篇文章写得很清楚,终于弄明白了,原来跟python的装饰器一样的效果.http://www.cnblog ...
- UpLoadify在IE下兼容问题
一.在IE9.IE10不能点击的问题解决 解决方法:进入uploadify的js文件中,搜索SWFUpload.prototype.getFlashHTML,找到它对应的语句,将方法全部替换为以下内容 ...
- nexus3.x启动不起来
1.首先说两种启动命令,网上最多的是用./nexus start.这种是后台启动,看不到实时日志:./nexus run 是实时启动可以看到日志. 2.linux下解压nexus-3.6.2-01-u ...
- VMware Workstation 15 安装教程
注:操作系统必须是64位 软件:360软件管家获取 1.运行下载完成的Vmware Workstation虚拟机软件包. 虚拟机软件的安装向导初始界面 2.在虚拟机软件的安装向导界面单击“下一步 ...
- 用 console.time()和 console.timeEnd() 测试你的 javascript 代码执行效率
无意中学习到了一种测试 javascript 代码执行效率的一种方法,就记下来便于以后使用,用到了console对象中的 time 和 timeEnd 方法 . console.time('m ...
- E. Rusty String
E. Rusty String time limit per test 3 seconds memory limit per test 512 megabytes input standard inp ...
- Win8.1 Hyper-V 共享本机IP上网
公司的Win8.1自带了Hyper v,可是死活连接不到网络. 原因是公司只给每人分配一个局域网IP,而默认情况下Hyper-V的虚拟机会动态分配了一个没有经过MIS人员许可的IP…… 百度了N久解决 ...
- noip模拟赛 Chtholly Nota Seniorious
题目背景 大样例下发链接: https://pan.baidu.com/s/1nuVpRS1 密码: sfxg こんなにも.たくさんの幸せをあの人に分けてもらった だから.きっと 今の.私は 谁が何と ...
- Sencha Touch 2.1学习图表Chart概述
Extjs.chart提供了可视化展现数据的能力,每个图表可以绑定到数据模型Ext.data.Store上, 并随着数据的变换可以自动的更新图表 一个图表对象包括图标风格.坐标(axes).序列(se ...