呓语 | 杨英明的个人博客

专注于c++、Python,欢迎交流

By

第一个小项目 - 去掉指定文件中的注释

 1 //功能:
 2 //去掉指定cpp源文件中的注释
 3 
 4 //思路:
 5 //与一cpp源文件建立关联
 6 //以字符形式打开
 7 //依次检测它的每一个字符,直到遇到eof(文件结束符)
 8 //如果遇到'/',如果它的下一个字符也为'/',则说明从这里开始是注释,所以删掉从这一行从此处以后的所有字符
 9 
10 //总结:
11 //1、一开始把while中的infile.get(c)写成infile>>c,以至于输出的ex(2).cpp文件中所有代码都写到了一行,而且没有空格。
12 //原因是用类似于“cin>>”的方式“infile>>”读入是忽略空格和回车的。
13 //2、学会到peek()的用法,文件流输入输出里面也有peek(),观察当前字符的下一个字符是什么,而不改变当前指针的位置,不管peek多少次都一样。
14 //3、学到用c++程序删除文件的方法,添加windows.h头文件,然后调用DeleteFileA(path)函数(path可以是一个字符串变量也可以是一个字符串常量)删除path指定路径的文件。
15 
16 //改进方案:
17 //只能作用于指定目录指定名字的文件(当前目录下的ex.cpp文件),而且没有图形界面。
18 //下一步做出一个图形界面来,并且可以转换任意cpp文件。 
19 #include <fstream>
20 #include <iostream>
21 #include <stdlib.h>
22 #include <windows.h>
23 using namespace std;
24 
25 int main()
26 {
27     char c;
28     ifstream infile("ex.cpp",ios::in);      //与ex.cpp源文件建立关联,方式是输入。
29     ofstream outfile("ex_temp.cpp",ios::out);
30     if((!infile)||(!outfile)){                    //如果打开失败,提示,退出程序。
31         cerr<<"open error!"<<endl;
32         exit(1);
33     }
34     while(infile.get(c)){       //依次读入字符,直到检测到eof
35         if(c=='/'){     //如果当前字符为'/'
36             if((c=infile.get())=='/'){     //如果'/'的下一个字符还是'/',则说明这里开始是注释。
37                 //开始删掉这一行以后的所有字符。
38                 while((c=infile.get())!='\n');
39                 outfile<<c;     //输出c的值,即一个回车,本行结束。
40             }
41             else if(c=='*'){    //如果'/'的下一个字符是'*',则说明这里开始是段注释
42                 while((c=infile.get())!='*'){
43                     if((c=infile.peek())=='/'){
44                         break;
45                     }
46                 }
47             }
48             else{           //如果第二个字符既不是'/',也不是'*',说明还不是注释,输出上一个字符'/',以及当前字符。
49                 outfile<<'/'<<c;
50             }
51         }
52         else{   //如果当前字符不是'/',原样写入。
53             outfile<<c;
54         }
55     }
56     infile.close();
57     outfile.close();
58 
59     //去掉文件开头的空行
60     ifstream infile2("ex_temp.cpp",ios::in);
61     ofstream outfile2("ex_res.cpp",ios::out);
62     if((!infile2)||(!outfile)){
63         cerr<<"open error!"<<endl;
64         exit(1);
65     }
66     while(infile2.get(c)){
67         if(c!=' ' && c!='\n')
68             break;
69     }
70     do{
71         outfile2.put(c);
72     }while(infile2.get(c));
73     infile2.close();
74     outfile2.close();
75 
76     DeleteFileA("ex_temp.cpp");         //删掉中间文件
77     cout<<"去注释成功!请按回车结束!";
78     getchar();
79     return 0;
80 }

 

##原创声明 **转载请注明:[呓语](http://www.yangyingming.com) » [第一个小项目 - 去掉指定文件中的注释](http://www.yangyingming.com/article/345)**