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的更多相关文章
随机推荐
- servlet-请求重定向
package servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.ser ...
- THREE.js代码备份——canvas - geometry - earth(球体贴纹理)
<!DOCTYPE html> <html lang="en"> <head> <title>three.js canvas - g ...
- 【技术累积】【点】【java】【21】序列化二三事
基础概念 把对象等转为二进制进行传输的是序列化,反之为反序列化: 应用场景一般为读写文件,传输数据/接口调用: Externalizable和Serializable java的序列化方式有两种: S ...
- JS 获得节点
var ele = ev.parentNode; var elem_child = ele.childNodes; in elem_child) { //遍历子元素数组 if (elem_child[ ...
- Please, commit your changes or stash them before you can merge
参照 : https://blog.csdn.net/iefreer/article/details/7679631 用git pull来更新代码的时候,遇到了下面的问题: error: Your l ...
- FTP服务器访问主动模式、被动模式
在公司里面,经常需要访问外网FTP取资料等情况.但是有时用windows界面访问经常遇到各种问题. 下面介绍两种客户端是如何访问ftp服务器. 首先我们需要说明:防火墙,是阻拦外界与内部的通讯的一道关 ...
- PHP控制反转(IOC)和依赖注入(DI
<?php class A { public $b; public $c; public function A() { //TODO } public function Method() { $ ...
- altera quartus 百度云分享 quartus prime 17.1 16.1 13.0
quartus prime 17.1 标准版 链接:https://pan.baidu.com/s/10QWejKdDobVxDSqnVPJ0xQ 提取码:hhvj 复制这段内容后打开百度网盘手机Ap ...
- 解决windows64位系统上安装mysql-python报错
解决windows64位系统上安装mysql-python报错 2018年03月12日 13:08:24 一个CD包 阅读数:1231 版权声明:本文为博主原创文章,未经博主允许不得转载. ht ...
- 使用python的几个小经验(查看文档)
好久没有水博客了,未来再过20天不到的时间又得参加软考,今天终于得好好水一发帖子 关于Python,很多人包括我之前都不知道怎么找文档,现在有一个好办法,就是在命令行模式下调用pydoc –p xxx ...