顾名思义就是删除程序中的注释,不清楚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. Node.js概述

    Node.js最重要的特性:通过单线程实现异步处理环境 Node.js解决的问题: Node.js修改了客户端连接服务器端的连接方法,不需要为每个客户端连接创建一个新的线程,而是为每个客户端连接触发一 ...

  2. nagios 插件ndoutils 安装配置

    nagios 插件ndoutils 安装配置 原文地址:http://www.cnblogs.com/caoguo/p/5022645.html # Nagios install ndoutils # ...

  3. layer:好看的弹出窗口

    layer是一款web弹层组件,只需在调用时简单地配置相关参数,即可轻松实现丰富与便捷的操作体验. 这是layer的官方地址,里面的使用介绍非常详细(http://layer.layui.com/) ...

  4. c#中动态创建textbox并且从数据库中获取表中数据添加到textbox中

    private void FormLugOther_Load(object sender, EventArgs e) { foreach (string str in FormLug.FieldLis ...

  5. CentOS6.9下NFS配置说明(转载)

    NFS是Network File System的缩写,即网络文件系统.它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录.NFS客户端可以通过挂载(mount)的方式将NFS ...

  6. Win32 线程同步

    Win32 线程同步 ## Win32线程同步 ### 1. 原子锁 ### 2. 临界区 {全局变量} CRITICAL_SECTION CS = {0}; // 定义并初始化临界区结构体变量 {线 ...

  7. Mac下对Android apk反编译

    在Mac上进行反编译apk,需要三个工具,分别为(附下载地址): apktool,下载Mac版 作用:资源文件获取,能够提取出图片文件和布局文件进行使用查看 dex2jar,下载最新的即可,目前是2. ...

  8. 洛谷 1003 NOIP2011 D1T1 铺地毯

    [题解] 因为只询问一个点,所以记录地毯信息,倒着找第一个符合条件的地毯就是在最上面的. #include<cstdio> #include<algorithm> #defin ...

  9. hdu2004 成绩转换【C++】

    成绩转换 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  10. mysql参数设置与查看

    查看默认的参数设置(包含读取到的参数文件中的设置) mysqld --verbose --help   查看默认的参数设置(不包含参数文件中的设置) mysqld --no-defaults --ve ...