注释转换

原创 2016年06月01日 00:05:13

AnnotationConversion.h

# pragma once
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <assert.h>
#include <errno.h>
typedef enum State
{
 c_BEGIN,
 c_END
}State;
typedef enum RunState
{
 SUCCESS,
 FILE_WRONG,
 NO_MATCH
}RunState;
RunState AnnotationConvert(const char* input,const char* output);

AnnotationConversion.c

#include "AnnotationConversion.h"
RunState convert(FILE* input, FILE* output)
{
 char first,second;
 RunState ret = SUCCESS;
 State tag = c_END;
 assert(input);
 assert(output);
 do{
  first = fgetc(input);
  switch(first)
  {
   case '/':
    second = fgetc(input);
    if(second == '*')
    {
     //3.匹配问题
     if(tag == c_END)
     {
      fputc('/',output);
      fputc('/',output);
      tag = c_BEGIN;
     }
     else
     {
      fputc('/', output);
      fputc('*', output);
     }
    }
    else if(second == '/')//C++注释问题
    {
     char next;
     fputc(first, output);
     fputc(second, output);
     do
     {
      next = fgetc(input);
      fputc(next, output);
      if(next == EOF)
      {
       return ret;
      }
     }while(next != '\n');
    }
    else
    {
     fputc(first, output);
     fputc(second, output);
    }
    break;
   case '\n'://4.多行注释问题
    if(tag == c_BEGIN)
    {
     fputc(first, output);
     fputc('/', output);
     fputc('/', output);
    }
    else
    {
     fputc(first, output);
    }
    break;
   case '*':
    second = fgetc(input);
    if(second == '/')
    {
     //2.换行情况
     char next = fgetc(input);
     if(next == '/')//5.连续注释问题
     {
      fputc('\n', output);
      fseek(input, -1, SEEK_CUR);
     }
     else if(next != '\n'&& next != EOF)
     {
      fputc('\n', output);
      fputc(next, output);
     }
     else
     {
      fputc('\n', output);
     }
     tag = c_END;
    }
    else if(second == '*')//6.连续的***/问题
    {
     fputc(first, output);
     fseek(input, -1, SEEK_CUR);
    }
    else
    {
     fputc(first,output);
     fputc(second,output);
    }
    break;
   
   default:
    if(first != EOF)
    {
     fputc(first,output);
    }
    break;
  }
 }while(first != EOF);
 if(tag == c_BEGIN)
 {
  return NO_MATCH;
 }
}
RunState AnnotationConvert(const char* inputFile,const char* outputFile)
{
 FILE* fIn,*fOut;
 RunState ret;
 fIn = fopen(inputFile, "r");
 if(fIn == NULL)
 {
  printf("%s文件打开失败 Error:%d\n",inputFile,errno);
  return FILE_WRONG;
 }
 fOut = fopen(outputFile, "w");
 if(fOut == NULL)
 {
  fclose(fIn);
  printf("%s文件打开失败 Error:%d\n",outputFile,errno);
  return FILE_WRONG;
 }
 ret = convert(fIn,fOut);
 fclose(fIn);
 fclose(fOut);
 return ret;
}

Test.c

#include <stdlib.h>
#include "AnnotationConversion.h"
int main()
{
 RunState ret;
 ret = AnnotationConvert("inputFile.c"," outputFile.c");
 if(ret ==SUCCESS)
 {
  printf("SUCCESS");
 }
 else if(ret == FILE_WRONG)
 {
  printf("FILE_WRONG");
 }
 else
 {
  printf("NO_MATCH");
 }
 system("pause");
 return 0;
}

inputFile.c

1.一般情况

/*int m = 0;*/

2.换行问题

/*int i = 0;*/int j = 0;

/*int i = 0;*/

int j = 0;

3.匹配问题

/*int i = 0/*j = 0*/

4.多行注释问题

/*

int i = 0;

int j = 1;

*/int k = 2;

5.连续注释问题

/*aaa*//*bbb*/

6.连续的***/问题

/***/

7.c++注释问题

//   /*int i = 0;

outputFile.c

1.一般情况

//int m = 0;

2.换行问题

//int i = 0;

int j = 0;

//int i = 0;

int j = 0;

3.匹配问题

//int i = 0/*j = 0

4.多行注释问题

//

//int i = 0;

//int j = 1;

//

int k = 2;

5.连续注释问题

//aaa

//bbb

6.连续的**

问题

//*

7.c++注释问题

//   /*int i = 0;

版权声明:本文为博主原创文章,未经博主允许不得转载。

注释转换机

  • 2017年02月09日 22:41
  • 7.76MB
  • 下载

c语言小项目----注释转换

这篇博客,我将整理关于注释转换的知识,首先,得知道,注释转换包括,c语言注释转 换成c++注释,和c++注释转换成c语言注释。 c语言注释的风格:/*这是c语言注释*/ c++语言注释风格://这是c...

注释转换(进阶版)

  • 2017年02月25日 17:40
  • 7.78MB
  • 下载

阳历转换农历,有详细注释

  • 2010年05月27日 19:38
  • 4KB
  • 下载

【C语言】C代码注释转换

C语言注释转换是C语言内比较小的一个课题,这个课题的主要思想是需要考虑到可能出现的情况,然后转换为我们能用程序语言描述的情形。...

C++自测题 注释转换

  • 2009年05月21日 22:19
  • 518B
  • 下载

【C语言】注释转换项目实现

编写一个小项目将一个一个文件中的注释都转换成C++的注释风格 设计部分: (1)头文件模块:包括模块中需要引用的头文件定义,需要实现的主要函数的声明 (2)头文件中主要函数模块的实现:各个函数部分实现...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:注释转换
举报原因:
原因补充:

(最多只允许输入30个字)