码迷,mamicode.com
首页 > 其他好文 > 详细

注释转换

时间:2015-09-20 07:01:23      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:注释转换

#include <stdio.h>

#include <errno.h>

#include <assert.h>


typedef enum STATE

{

SUCCESS, // 成功

FILE_ERROE, // 文件错误

NO_MATCH, // 不匹配

OTHER, // 其他错误

}STATE;


typedef enum TAG

{

TAG_BEGIN, // 在C注释段中

TAG_END, // C注释结束

}TAG;


#pragma warning(disable:4996)


STATE AnnotationConvert(FILE* inFile, FILE* outFile)

{

TAG tag = TAG_END;

char firstCh, secondCh;

assert(inFile);

assert(outFile);


do{

firstCh = fgetc(inFile);

switch (firstCh){

// 1.一般情况

case ‘/‘:

secondCh = fgetc(inFile);

if (secondCh == ‘*‘ 

&& tag == TAG_END)

{

fputc(‘/‘, outFile);

fputc(‘/‘, outFile);


// 3.匹配问题

tag = TAG_BEGIN;

}

else if(secondCh == ‘/‘)

{

char next;

fputc(firstCh, outFile);

fputc(secondCh, outFile);


// 7.C++注释问题

do 

{

next = fgetc(inFile);

fputc(next, outFile);

} while (next != ‘\n‘

&& next != EOF);


// 当读到文件尾时,标记firstCh

if(next == EOF)

{

firstCh = EOF;

}

}

else{

fputc(firstCh, outFile);

fputc(secondCh, outFile);

}


break;

case ‘\n‘:

fputc(‘\n‘,outFile);


// 4.多行注释问题

if (tag == TAG_BEGIN)

{

fputc(‘/‘,outFile);

fputc(‘/‘,outFile);

}

break;

case ‘*‘:

secondCh = fgetc(inFile);

if (secondCh == ‘/‘)

{

// 2.换行问题

// 5.连续注释问题

char next = fgetc(inFile);

if (next != ‘\n‘ && next != EOF)

{

fseek(inFile, -1, SEEK_CUR);

}


fputc(‘\n‘, outFile);


tag = TAG_END;

}

else if(secondCh == ‘*‘)

{

// 6.连续的**/问题

fseek(inFile, -1, SEEK_CUR);

fputc(firstCh, outFile);

}

else

{

fputc(firstCh, outFile);

fputc(secondCh, outFile);

}

break;

default:

fputc(firstCh, outFile);

break;

}

}while(firstCh != EOF);


if(tag == TAG_END)

{

return SUCCESS;

}

else

{

return NO_MATCH;

}

}


int StartConvert()

{

STATE s;

const char* inFileName = "input.c";

const char* outFileName = "output.c";


FILE* inFile = fopen(inFileName, "r");

FILE* outFile = fopen(outFileName, "w");


if (inFile == NULL)

{

return FILE_ERROE;

}


if (outFile == NULL)

{

fclose(inFile);

return FILE_ERROE;

}


s = AnnotationConvert(inFile, outFile);


fclose(inFile);

fclose(outFile);


return s;

}


int main()

{

STATE ret = StartConvert();


if (ret == SUCCESS)

{

printf("转换成功\n");

}

else if (ret == NO_MATCH)

{

printf("不匹配\n");

}

else if (ret == FILE_ERROE)

{

printf("文件错误: %d\n", errno);

}

else

{

printf("其他错误: %d\n", errno);

}


return 0;

}


注释转换

标签:注释转换

原文地址:http://10622551.blog.51cto.com/10612551/1696431

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!