注释转换
2016-04-03 15:24
246 查看
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;
相关文章推荐
- ie6 注释引起的问题
- 编写Ruby代码注释时需要注意的一些问题
- Ruby教程之注释、变量声明以及数组操作
- C#实现将千分位字符串转换成数字的方法
- oracle SCN跟TIMESTAMP之间转换
- C#将制定目录文件名转换成大写的方法
- Access转成SQL数据库的方法
- C#实现Stream与byte[]之间的转换实例教程
- C#中结构体和字节数组转换实现
- C#进制之间的相互转换详解
- 自己动手把ACCESS转换到SQLSERVER的方法
- 代码中到底应不应当写注释?
- 对比分析C语言中的gcvt()和ecvt()以及fcvt()函数
- C语言将24小时制转换为12小时制的方法
- C#实现HSL颜色值转换为RGB的方法
- C#利用微软自带库进行中文繁体和简体之间转换的方法
- php将字符串转换成16进制的方法
- php使用Image Magick将PDF文件转换为JPG文件的方法
- php对象和数组相互转换的方法
- 解析PHP自带的进位制之间的转换函数