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 }
原文链接: https://www.cnblogs.com/yym2013/archive/2013/05/08/3066779.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/87685
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!