注释转换

来源:互联网 发布:mac运行速度变慢 编辑:程序博客网 时间:2024/06/08 11:30

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 = 04.多行注释问题////int i = 0;//int j = 1;//int k = 2;5.连续注释问题//aaa//bbb6.连续的**问题//*7.c++注释问题//   /*int i = 0;

0 0
原创粉丝点击