顾名思义就是删除程序中的注释,不清楚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的更多相关文章

随机推荐

  1. html5——颜色

    CSS2 1.opacity,可以设置透明度,但是父盒子设置了透明度会影响子盒子 CC3 1.transparent属性,但是不可改变透明值 2.rgba():r--red g--green b--b ...

  2. JS——scroll封装

    DTD未声明:document.body.scrollTop DTD已声明:document.documentElement.scrollTop 火狐谷歌IE9:window.pageYOffset ...

  3. c++枚举变量初始值

    #include <iostream> // std::cout, std::boolalpha, std::noboolalpha enum foo { c = -1, a = 1, b ...

  4. 线索二叉树【C语言】

    #include<stdio.h> #include<stdlib.h> typedef char ElemType; typedef enum{Link,Thread} Po ...

  5. Ubuntu 18.04 nvidia driver 390.48 安装 TensorFlow 1.12.0 和 PyTorch 1.0.0 详细教程

    最近要在个人台式机上搭建TensorFlow和PyTorch运行环境,期间遇到了一些问题.这里就把解决的过程记录下来,同时也可以作为安装上述环境的过程记录. 如果没有遇到类似的问题,想直接从零安装上述 ...

  6. 《零压力学Python》 之 第三章知识点归纳

    第三章(第一个程序)知识点归纳 编程犹如写剧本.Python函数与剧本差别不大,你可以反复调用函数,而它每次都执行预定的“脚本”(脚本也可以指整个程序). 在Python IDLE中,真正的编程是从编 ...

  7. NLTK学习笔记(六):利用机器学习进行文本分类

    目录 一.监督式分类:建立在训练语料基础上的分类 特征提取器和朴素贝叶斯分类器 过拟合:当特征过多 错误分析 二.实例:文本分类和词性标注 文本分类 词性标注:"决策树"分类器 三 ...

  8. STM32定时器配置(TIM1-TIM8)高级定时器+普通定时器,定时计数模式下总结

    文章结构: ——> 一.定时器基本介绍 ——> 二.普通定时器详细介绍TIM2-TIM5 ——> 三.定时器代码实例 一.定时器基本介绍  之前有用过野火的学习板上面讲解很详细,所以 ...

  9. noip模拟赛 hungary

    分析:比较难的一道题,看到要求方案数,又是在一棵树上,自然就想起了树形dp.状态该怎么表示呢?首先肯定有一维状态表示以i为根的子树,考虑到i有没有匹配对答案也是有影响的,自然而然状态就出来了:f[i] ...

  10. noip模拟赛 希望

    分析:题目中说用栈实现,我觉得这样很麻烦,就用了一个数组+指针解决了.其实就是大模拟. #include <stack> #include <string> #include ...