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


     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 }
  • 相关阅读:
    CPSR_cxsf
    C的xml编程libxml2(转)
    showModalDialog 使用详解
    SecureCRT 6.7.4 安装
    Nokia Qt SDK 1.1的开发环境的搭建
    ARM寄存器介绍
    ucos在xp平台下开发环境搭建
    用JavaScript实现让浏览器停止载入页面
    makefile变量使用及其条件判断
    Makefile中指示符“include”、“include”和“sinclude”的区别
  • 原文地址:https://www.cnblogs.com/yym2013/p/3066779.html
Copyright © 2020-2023  润新知