zoukankan      html  css  js  c++  java
  • C语到C++注释转换小项目

    可将其分为下面四个状态进行讨论即可:

      1 #include<stdio.h>
      2 #include<windows.h>
      3 #define INPUTFILE  "input.c"
      4 #define OUTPUTFILE "output.c"     
      5 
      6 enum Status{
      7     NULLSTATUS,
      8     CPPSTATUS,
      9     CSTATUS,
     10     EOFSTATUS,
     11 }; 
     12 int  status = NULLSTATUS;
     13 
     14 void do_null_status(FILE *ifp,FILE *ofp){  //  初始态为普通状态 (没有参与注释部分的内容 )
     15     int c1=fgetc(ifp);
     16     switch(c1){           
     17         case '/':{  
     18             int c2 = getc(ifp);
     19             switch(c2){           //   .../*  
     20                 case '*':
     21                     fputc('/',ofp);
     22                     fputc('/',ofp);
     23                     status = CSTATUS;
     24                     break;
     25                 case '/':         //     ... // 
     26                     fputc('/',ofp);
     27                     fputc('/',ofp);
     28                     status = CPPSTATUS;
     29                     break;
     30                 case EOF:
     31                     fputc('/',ofp);
     32                     status = EOFSTATUS;
     33                     break;
     34                 default:         //     .../ ...
     35                     fputc('/',ofp);
     36                     fputc(c2,ofp);
     37                     break;
     38             }
     39             break;
     40         }
     41         case EOF:
     42             status = EOFSTATUS;
     43             break;
     44         default:
     45             fputc(c1,ofp);
     46             break;
     47     }
     48 }
     49 void do_cpp_status(FILE *ifp,FILE *ofp){     // 已进入C++风格注释(// ...)  保持此种风格注释 
     50     int c = fgetc(ifp);  
     51     switch (c) {
     52         case '
    ' :            //   ....
    
     53             fputc('
    ',ofp);
     54             status = NULLSTATUS;
     55            break;
     56         case EOF :
     57             status = EOFSTATUS;
     58            break;
     59         default:
     60            fputc(c, ofp);
     61           break;
     62     }
     63 }
     64 void do_c_status(FILE *ifp,FILE *ofp){    //  进入C风格注释 ( /* ...)  目的改为C++风格注释 
     65     int c1= fgetc(ifp);
     66     switch(c1)
     67     {
     68         case '*':{
     69             int c2= fgetc(ifp);
     70             switch(c2){
     71                 case '/' :             //   //...*/...          
     72                     fputc('
    ' ,ofp);                           
     73                     status = NULLSTATUS;
     74                      break;
     75                  case EOF:
     76                      fputc('*' ,ofp);
     77                      status = EOFSTATUS;
     78                 default:
     79                     fputc('*',ofp);
     80                     ungetc(c2, ifp);      //这个地方调了好多遍才注意到,实在是愚钝。 
     81                     break;
     82             }
     83             break;
     84         }    
     85         case '
    ':     //      /*  ... 
    
     86             fputc('
    ', ofp);
     87             fputc('/' , ofp);
     88             fputc('/' , ofp);
     89             break;
     90         case EOF:
     91             status= EOFSTATUS;
     92             break;
     93         default:       //   /* ... 
     94             fputc(c1,ofp);
     95             break;        
     96     }
     97 }
     98 void convert_work(FILE *ifp,FILE *ofp){
     99     while( status != EOFSTATUS){
    100         switch(status){
    101             case NULLSTATUS :
    102                 do_null_status(ifp,ofp);
    103                 break;
    104             case CPPSTATUS :
    105                 do_cpp_status(ifp,ofp);
    106                 break;    
    107             case CSTATUS :
    108                 do_c_status(ifp,ofp);
    109                 break;
    110             case EOFSTATUS:
    111                 break;
    112             default:
    113                 break;
    114         }
    115     }
    116 }
    117 int main(){
    118     FILE *ifp=fopen(INPUTFILE,"r");
    119     FILE *ofp=fopen(OUTPUTFILE,"w");
    120     if(ifp == NULL || ofp == NULL){
    121         perror(" Open failed
    ");
    122         exit(1);
    123     }
    124     convert_work(ifp , ofp);
    125     fclose(ifp);
    126     fclose(ofp);
    127     system("pause");
    128     return  0;
    129 } 

    实例测试:
     
    Esh!
  • 相关阅读:
    外部主机连接mysql服务器延时严重问题
    linux服务器wget无法成功解析域名及程序获取外网数据不稳定问题
    ecstore后台规格超过一定数量保存丢失
    Stata 指标体系权重的计算
    Stata 无序多分类Logistic回归
    asp.net core 管道模型及中间件MiddleWare原理
    Stata—循环语句
    Stata—更名、排序及表达式
    Stata—文件格式转换
    Stata—基本统计量输出、模型估计和结果输出
  • 原文地址:https://www.cnblogs.com/tp-16b/p/8007131.html
Copyright © 2011-2022 走看看