注释转换 ——C++注释转换为标准C语言注释
来源:互联网 发布:mac桌面壁纸设置 编辑:程序博客网 时间:2024/06/05 08:59
具体要求:
1:C++风格的注释//注释转换为标准C分风格/* */注释
2:/* */风格的注释保持原样
3:所有的转换需要符合语法规则
4:注释转换需要支持注释嵌套
转换要求:
注释的嵌套情形很多,这里只是举例,你需要遵照C/C++语言的注释规则来编写代码,我不会仅测试这里的例子。
1、单行注释或没有嵌套,注释行直接转换,如:
①//123 /* 123 */
②/* 123 */ /* 123 */ 不变
③/*123
*/ 保持原样
2、有嵌套的注释(一个注释中还有嵌套其他注释符号//,/* */)嵌套中多余的每个注释符号用两个空格代替。
如单行:
① //123 /*456 */ /*123 456*/
②//123//456 /*123 456*/
③//123*//*456 /*123 456*/
如跨行
/*…….. /*……..
//……… ……….
// …….. ……….
*/ */
注意事项:
1、除以下两种情况的修改,源文件转换后不能有任何其它的修改:
①多余的注释符用空格代替
②//在注释开始替换为/* ,行尾增加*/
2、下面的3种情形无需转换
① /* 123 */ /* 456 */
②/* 123 */ /* 456
*/
③/* 123
*/ /* 456
*/
3、不需要考虑输入文件中不符合语法规则的注释
主函数代码块:
#include<iostream>using namespace std;extern int CommentConvert(FILE *inputfile, FILE *outputfile); int main(){FILE *fpIn = NULL; //inputfileFILE *fpOut = NULL; //outputfilefpIn = fopen("input.c","r");if(NULL == fpIn){cout<<"Open input file fail!"<<endl;return -1;}fpOut = fopen("output.c","w");if(NULL == fpOut){cout<<"Open output file fail!"<<endl;return -1;}CommentConvert(fpIn,fpOut); //fclose(fpIn);fclose(fpOut);return 0;}
实现具体功能函数:
#include<iostream>using namespace std; extern int CommentConvert(FILE *inputfile, FILE *outputfile);typedef enum{NO_COMMENT_STATE,C_COMMENT_STATE,CPP_COMMENT_STATE,STR_STATE,END_STATE}STATE_ENUM;typedef struct{FILE *inputfile;FILE *outputfile;STATE_ENUM ulstate;}STATE_MACHINE; STATE_MACHINE g_state = {0};///////////////////////////////////////////////////void EventPro(char ch);void EventProAtNo(char ch);void EventProAtC(char ch);void EventProAtCpp(char ch);void EventProAtStr(char ch);////////////////////////////////////////////////////int CommentConvert(FILE *inputfile, FILE *outputfile){if(inputfile==NULL || outputfile==NULL){cout<<"input argument Invalid!"<<endl;return -1;}g_state.inputfile = inputfile;g_state.outputfile = outputfile;g_state.ulstate = NO_COMMENT_STATE;char ch;while(g_state.ulstate != END_STATE){ch = fgetc(g_state.inputfile); EventPro(ch);}return 0;}void EventPro(char ch){switch(g_state.ulstate){case NO_COMMENT_STATE:EventProAtNo(ch);break;case C_COMMENT_STATE:EventProAtC(ch);break;case CPP_COMMENT_STATE:EventProAtCpp(ch);break;case STR_STATE:EventProAtStr(ch);break;case END_STATE:break;}}void EventProAtNo(char ch){char nextch;switch(ch){case '/': // // /* nextch = fgetc(g_state.inputfile);if(nextch == '/') // C++{fputc('/',g_state.outputfile);fputc('*',g_state.outputfile);g_state.ulstate = CPP_COMMENT_STATE;}else if(nextch == '*') //C{fputc(ch,g_state.outputfile);fputc(nextch,g_state.outputfile);g_state.ulstate = C_COMMENT_STATE;}else{}break;case EOF:g_state.ulstate = END_STATE;break;default:fputc(ch,g_state.outputfile);break;}}void EventProAtC(char ch){char nextch;switch(ch){case '/':// 嵌套处理nextch = fgetc(g_state.inputfile);if(nextch == '/')// /* hjhj//hhh{fputc(' ',g_state.outputfile);fputc(' ',g_state.outputfile);}else if(nextch == '*') // /*hhjhh/*{ fputc(' ',g_state.outputfile); fputc(' ',g_state.outputfile);}else{fputc(ch,g_state.outputfile);}break; case '*':nextch = fgetc(g_state.inputfile);if(nextch == '/'){fputc(ch,g_state.outputfile);fputc(nextch,g_state.outputfile);g_state.ulstate = NO_COMMENT_STATE;}break;case '"': g_state.ulstate =STR_STATE;break;default:fputc(ch,g_state.outputfile);break;}}void EventProAtCpp(char ch){//123 /*123char nextch;switch(ch){case EOF:fputc('*',g_state.outputfile);fputc('/',g_state.outputfile);g_state.ulstate = END_STATE;break;case '\n'://换行处理 fputc('*',g_state.outputfile); fputc('/',g_state.outputfile); fputc('\n',g_state.outputfile); g_state.ulstate = NO_COMMENT_STATE;break;case '/':// 嵌套处理nextch = fgetc(g_state.inputfile);if(nextch == '/')// // hjhj//hhh{fputc(' ',g_state.outputfile);fputc(' ',g_state.outputfile);}else if(nextch == '*') // //hhjhh/*{ fputc(' ',g_state.outputfile); fputc(' ',g_state.outputfile);}else{fputc(ch,g_state.outputfile);}break;case '*':nextch = fgetc(g_state.inputfile);if(nextch == '/')// // asas*/{fputc(' ',g_state.outputfile);fputc(' ',g_state.outputfile);}else {fputc(ch,g_state.outputfile);}break;case '"': g_state.ulstate =STR_STATE;break;default:fputc(ch,g_state.outputfile);break;}}void EventProAtStr(char ch){char nextch;switch(ch){case '\0':nextch = fgetc(g_state.inputfile);if(nextch == '"'){g_state.ulstate = NO_COMMENT_STATE;}break;case EOF:g_state.ulstate = END_STATE;break;default:fputc(ch,g_state.outputfile);break;}}
- 【C语言】注释转换 ——C注释转换为标准C++语言注释
- 注释转换 ——C++注释转换为标准C语言注释
- [项目]注释转换 ——C++注释转换为标准C语言注释
- 注释转换 ——C注释转换为标准C++注释
- C语言小项目—注释转换( C注释转换为C++注释 )
- 【C++】注释转换详解 C++注释转换为标准C语言注释
- 注释转换—将C语言注释风格转换为C++注释风格
- [注释转化]C语言注释转换为C++语言注释
- 【C语言】注释转换
- C语言 注释转换
- 【C语言】注释转换
- c语言注释转换(c注释转换成c++注释)
- 注释转换——C语言项目
- C语言小项目—注释转换
- 注释转换 (将C注释转换为C++注释)
- 注释转换 续 (C++注释转换为C注释)
- 注释转换(将C注释转换为C++注释)
- 注释转换(C注释转换为c++注释)
- 任意连通图的哈密顿回路计算流程
- 正则匹配多个空格 换行
- IL指令详细
- Centos开机自动挂载windows中的ntfs磁盘
- Android View 给触摸操作提供视觉提示 细致才是王道
- 注释转换 ——C++注释转换为标准C语言注释
- jquery easyui 问题合集
- Android_常见控件之spinner详解
- 讨论Matlab中double,im2double,mat2gray函数区别
- Hibernate查询语言HQL详解
- IOS8 UI: 由 self.view = nil 引起的思考
- Eclipse--theme--color 插件设置
- Direct-X学习笔记--DirectInput
- com.mysql.jdbc.Driver和org.gjt.mm.mysql.Driver区别