码迷,mamicode.com
首页 > 编程语言 > 详细

C++_homework_EraseComment

时间:2018-03-29 02:08:23      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:include   相互   work   关闭   fst   ++   class   不用   pos   

顾名思义就是删除程序中的注释,不清楚fsm的机制,完全是自己的思路做。

开头先读取一个字符确定是否到文件结尾,如果读取成功,是换行的话就换行,并继续读取,不是的话,用putback放回缓冲区,并整行读取。

有两个状态开关(bool 0为关),相互制约,state开时,说明已经遇到/*,要遇到*/才会关闭,flag开时,说明遇到",再遇到"才会关闭接下来均是字符串内容,不用考虑注释。

state开时,posa表示/*的/的位置,如果一行结束也没有遇到*/,那么从/*开始删除到结束,并且将posa赋值0。下一行时同样操作。

 1 #include <iostream>
 2 #include <string>
 3 #include <fstream>
 4 using namespace std;
 5 
 6 int main(int argc,char* argv[])
 7 {
 8     ifstream fin;
 9     ofstream fout;
10     fin.open(argv[1]);
11     fout.open(argv[2]);
12     char c;
13     bool flag=0,state=0;
14     int posa=-1,posb=-1;
15     while(fin.get(c)){
16         if(c==\n) fout<<endl;
17         else{
18             fin.putback(c);
19             string ss;
20             getline(fin,ss);
21 
22             for(int i=0;i<ss.size();i++){
23                 if(state==false){
24                     if(ss[i]=="){
25                         if(flag==0) flag=true;
26                         else flag=false;
27                     }
28 
29                     if(flag==0&&ss[i]==/){
30                         if(ss[i+1]==/)
31                             ss.erase(i,ss.size()-i);
32                         if(state==false&&ss[i+1]==*){
33                             posa=i;
34                             state=true;
35                         }
36                     }
37 
38                 }
39                 if(state==true&&ss[i]==*){
40                     if(ss[i+1]==/){
41                         posb=i+1;
42                         state=false;
43                     }
44                 }
45             }
46 
47             if(state==true){
48                 ss.erase(posa,ss.size()-posa);
49                 posa=0;
50             }
51             else if(state==false&&ss.size()&&posa!=-1){
52                 ss.erase(posa,posb-posa+1);
53                 posa=posb=-1;
54             }
55 
56             fout<<ss<<endl;
57         }
58 
59     }
60     fout.close();
61     fin.close();
62     return 0;
63 }

关于文件操作和Ubuntu常用命令和argc&argv的问题,(可能会)另开一篇讲。

C++_homework_EraseComment

标签:include   相互   work   关闭   fst   ++   class   不用   pos   

原文地址:https://www.cnblogs.com/Jiiiin/p/8667137.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!