关闭

注释转换

86人阅读 评论(0) 收藏 举报
分类:




#pragma once
#include<assert.h>
#include <errno.h>

#pragma warning (disable: 4996)

typedef enum ConvertState
{
     SUCCESS,
     FILE_ERROR,
     NO_MATCH,
}ConvertState;

typedef enum State
{
     C_BEGIN,
     C_END,
     CPP_BEGIN,
     CPP_END,
}State;

ConvertState Convert(FILE* fIn, FILE* fOut)
{
     ConvertState  ret = SUCCESS;

     char first, second;
     State tag = C_END;
     assert(fIn);
     assert(fOut);
     do{
          first = fgetc(fIn);
          switch(first)
          {
          case '/':
               second = fgetc(fIn);
               if (second == '*')
               {
                    // 3.匹配问题
                    if (tag == C_END)
                    {
                         fputc('/', fOut);
                         fputc('/', fOut);

                         tag = C_BEGIN;
                    }
                    else
                    {
                         fputc('/', fOut);
                         fputc('*', fOut);
                    }
               }
               else if(second == '/')
               {
                    char next;
                    fputc('/', fOut);
                    fputc('/', fOut);
                   
                    do{
                         next = fgetc(fIn);
                         fputc(next, fOut);

                         if (next == EOF)
                              return ret;

                    }while (next != '\n');
               }
               else
               {
                    fputc(first, fOut);
                    fputc(second, fOut);
               }
               break;
          case '\n':
               // 4.多行注释问题
               fputc('\n', fOut);

               if (tag == C_BEGIN)
               {
                    fputc('/', fOut);
                    fputc('/', fOut);
               }

               break;
          case '*':
               second = fgetc(fIn);
               if (second == '/')
               {
                    // 2.换行问题
                    char next = fgetc(fIn);

                    // 5.连续注释问题
                    if (next == '/')
                    {
                         fputc('\n', fOut);
                         fseek(fIn, -1, SEEK_CUR);
                    }
                    else if (next != '\n' && next != EOF)
                    {
                         fputc('\n', fOut);
                         fputc(next, fOut);
                    }
                    else
                    {
                         fputc('\n', fOut);
                    }

                    tag = C_END;
               }
               else if(second == '*')
               {
                    fputc(first, fOut);
                    fseek(fIn, -1, SEEK_CUR);
               }
               else
               {
                    fputc(first, fOut);
                    fputc(second, fOut);
               }

               break;
          default:
               if (first != EOF)
                    fputc(first, fOut);

               break;
          }
     }while(first != EOF);

     if (tag != C_END)
     {
          ret = NO_MATCH;
     }

     return ret;
}

ConvertState AnnotationConvert(const char* inputFile,
                            const char* outputFile)
{
     ConvertState ret;
     FILE* fOut, *fIn;
     fIn = fopen(inputFile, "r");
     if (fIn == NULL)
     {
          printf("打开文件%s失败, errno: %d\n", inputFile, errno);
          return FILE_ERROR;
     }

     fOut = fopen(outputFile, "w");
     if (fOut == NULL)
     {
          fclose(fIn);
          printf("打开文件%s失败! errno: %d", outputFile, errno);
          return FILE_ERROR;
     }
    
     ret = Convert(fIn, fOut);

     fclose(fIn);
     fclose(fOut);

     return ret;
}


1
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:23003次
    • 积分:1861
    • 等级:
    • 排名:千里之外
    • 原创:154篇
    • 转载:25篇
    • 译文:0篇
    • 评论:0条
    文章分类