博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语到C++注释转换小项目
阅读量:4980 次
发布时间:2019-06-12

本文共 3885 字,大约阅读时间需要 12 分钟。

可将其分为下面四个状态进行讨论即可:

1 #include
2 #include
3 #define INPUTFILE "input.c" 4 #define OUTPUTFILE "output.c" 5 6 enum Status{ 7 NULLSTATUS, 8 CPPSTATUS, 9 CSTATUS, 10 EOFSTATUS, 11 }; 12 int status = NULLSTATUS; 13 14 void do_null_status(FILE *ifp,FILE *ofp){ // 初始态为普通状态 (没有参与注释部分的内容 ) 15 int c1=fgetc(ifp); 16 switch(c1){ 17 case '/':{ 18 int c2 = getc(ifp); 19 switch(c2){ // .../* 20 case '*': 21 fputc('/',ofp); 22 fputc('/',ofp); 23 status = CSTATUS; 24 break; 25 case '/': // ... // 26 fputc('/',ofp); 27 fputc('/',ofp); 28 status = CPPSTATUS; 29 break; 30 case EOF: 31 fputc('/',ofp); 32 status = EOFSTATUS; 33 break; 34 default: // .../ ... 35 fputc('/',ofp); 36 fputc(c2,ofp); 37 break; 38 } 39 break; 40 } 41 case EOF: 42 status = EOFSTATUS; 43 break; 44 default: 45 fputc(c1,ofp); 46 break; 47 } 48 } 49 void do_cpp_status(FILE *ifp,FILE *ofp){ // 已进入C++风格注释(// ...) 保持此种风格注释 50 int c = fgetc(ifp); 51 switch (c) { 52 case '\n' : // ....\n 53 fputc('\n',ofp); 54 status = NULLSTATUS; 55 break; 56 case EOF : 57 status = EOFSTATUS; 58 break; 59 default: 60 fputc(c, ofp); 61 break; 62 } 63 } 64 void do_c_status(FILE *ifp,FILE *ofp){ // 进入C风格注释 ( /* ...) 目的改为C++风格注释 65 int c1= fgetc(ifp); 66 switch(c1) 67 { 68 case '*':{ 69 int c2= fgetc(ifp); 70 switch(c2){ 71 case '/' : // //...*/... 72 fputc('\n' ,ofp); 73 status = NULLSTATUS; 74 break; 75 case EOF: 76 fputc('*' ,ofp); 77 status = EOFSTATUS; 78 default: 79 fputc('*',ofp); 80 ungetc(c2, ifp); //这个地方调了好多遍才注意到,实在是愚钝。 81 break; 82 } 83 break; 84 } 85 case '\n': // /* ... \n 86 fputc('\n', ofp); 87 fputc('/' , ofp); 88 fputc('/' , ofp); 89 break; 90 case EOF: 91 status= EOFSTATUS; 92 break; 93 default: // /* ... 94 fputc(c1,ofp); 95 break; 96 } 97 } 98 void convert_work(FILE *ifp,FILE *ofp){ 99 while( status != EOFSTATUS){100 switch(status){101 case NULLSTATUS :102 do_null_status(ifp,ofp);103 break;104 case CPPSTATUS :105 do_cpp_status(ifp,ofp);106 break; 107 case CSTATUS :108 do_c_status(ifp,ofp);109 break;110 case EOFSTATUS:111 break;112 default:113 break;114 }115 }116 }117 int main(){118 FILE *ifp=fopen(INPUTFILE,"r");119 FILE *ofp=fopen(OUTPUTFILE,"w");120 if(ifp == NULL || ofp == NULL){121 perror(" Open failed\n");122 exit(1);123 }124 convert_work(ifp , ofp);125 fclose(ifp);126 fclose(ofp);127 system("pause");128 return 0;129 } 实例测试:

 

 

 

转载于:https://www.cnblogs.com/tp-16b/p/8007131.html

你可能感兴趣的文章
邻接表详解
查看>>
迭代dict的value
查看>>
eclipse package,source folder,folder区别及相互转换
查看>>
Py 可能是最全面的 python 字符串拼接总结(带注释版)
查看>>
《Java程序设计实验》 软件工程18-1,3 OO实验2
查看>>
【Herding HDU - 4709 】【数学(利用叉乘计算三角形面积)】
查看>>
OPENSSL使用方法
查看>>
开发WINDOWS服务程序
查看>>
cross socket和msgpack的数据序列和还原
查看>>
解决跨操作系统平台JSON中文乱码问题
查看>>
前端利器躬行记(1)——npm
查看>>
前端利器躬行记(6)——Fiddler
查看>>
Intellij Idea新建web项目(转)
查看>>
用JAVA编写浏览器内核之实现javascript的document对象与内置方法
查看>>
centos iptables
查看>>
寻找二叉查找树中比指定值小的所有节点中最大的那个节点
查看>>
如何设置输入框达到只读效果
查看>>
RT3070 USB WIFI 在连接socket编程过程中问题总结
查看>>
MIS外汇平台荣获“2013年全球最佳STP外汇交易商”
查看>>
LeetCode 题解之Add Digits
查看>>