c语言小项目---注释转换
来源:互联网 发布:程序员基础知识 编辑:程序博客网 时间:2024/05/21 10:47
```//CommentConvert.h文件#ifndef __COMMENT_CONVERT_H__#define __COMMENT_CONVERT_H__#include <stdio.h>#include <stdlib.h>enum Status{ NUL_STATUS,//无状态 C_STATUS,//C状态下 CPP_STATUS,//在C++状态下 END_STATUS//结束状态};void CommentConvert();void DoConvertWork(FILE* pfIn, FILE* pfOut);void DoNulStatus(FILE* pfIn, FILE* pfOut, enum Status* status);void DoCStatus(FILE* pfIn, FILE* pfOut, enum Status* status);void DoCppStatus(FILE* pfIn, FILE* pfOut, enum Status* status);#endif //__COMMENT_CONVERT_H__
//ConmmentConvert.c文件#define _CRT_SECURE_NO_WARNINGS 1 #include"CommentConvert.h"enum STATUS status = NUL_STATUS;void DoNulStatus(FILE *pfIn, FILE *pfOut, enum Status*status){ int first = 0; int second = 0; first = fgetc(pfIn); switch (first) { case '/': second = fgetc(pfIn); if (second == '/') { fputc('/', pfIn); fputc('/', pfOut); *status = CPP_STATUS; //在无状态下遇到"//"直接将"//"写进去,并进入cpp状态 } else if (second == '*') { fputc(first, pfIn); fputc('/', pfOut); *status = C_STATUS;//在无状态下遇到/*要将/*变成//写进去,并进入c状态 } else { fputc(first, pfOut); fputc(second, pfOut);//遇到其他字符时直接写进去,状态不改变。 } break; case EOF: status = END_STATUS;//如果遇到EOF,进入结束状态 break; case '"': fputc(first, pfOut); //state = STR_STATUS;//如果遇到",进入字符串状态 break; default: fputc(first, pfOut);//其他情况的字符,直接写进去就行 break; }}void DoCStatus(FILE *pfIn, FILE *pfOut, enum Status* status){ int first = 0; int second = 0; first = fgetc(pfIn); switch (first) { case '*': second = fgetc(pfIn); if (second == '/') // 遇到*/ 说明c的注释结束,切换到无状态 { status = NUL_STATUS; second = fgetc(pfIn); if (second != '\n') { fputc('\n', pfOut); //如果/后边的字符不是回车,需要写进去回车,然后再把独到的字符放回 ungetc(second, pfIn); } else { ungetc(second, pfIn);//如果是回车,把回车放回 } } else { fputc(first, pfOut);//如果遇到*,但是后边不是/,把*放进去,*后边的字符放回 } break; case '\n': fputc(first, pfOut);//如果需要回车,回车写入,在写入//状态不变。 fputc('/', pfOut); fputc('/', pfOut); break; default: fputc(first, pfOut); break; }}void DoCppStatus(FILE *pfIn, FILE *pfOut, enum Status*status){ int first = 0; int fgetc(pfIn); first = fgetc(pfIn); switch (first) { case '\n': fputc(first, pfOut);//cpp状态,如果遇到回车,cpp状态结束,无状态 status = NUL_STATUS; break; default: if (first == EOF) { status = END_STATUS; } else { fputc(first, pfOut); } break; }}void DoConvertWork(FILE*pfln, FILE*pfOut){ enum STATE status = NUL_STATUS; while (status != END_STATUS) { switch (status) { case NUL_STATUS: DoNulStatus(pfln, pfOut, &status); break; case C_STATUS: DoCStatus(pfln, pfOut, &status); case CPP_STATUS: DoCppStatus(pfln, pfOut, &status); break; } }}void CommentConvert(FILE *pfIn, FILE *pfOut){ while (status != END_STATUS) { switch (status) { case NUL_STATUS: DoNulStatus(pfIn, pfOut,&status); break; case C_STATUS: DoCStatus(pfIn, pfOut, &status); break; case CPP_STATUS: DoCppStatus(pfIn, pfOut, &status); break; case END_STATUS: break; } }}
//test.c测试文件#define _CRT_SECURE_NO_WARNINGS 1 #include"CommentConvert.h" void test(){ CommentConvert();}int main(){ FILE *pfIn= NULL; FILE *pfOut = NULL; printf("注释开始\n"); pfIn = fopen("input.FIlE ","r"); if (NULL == pfIn) { perror("open file for read"); exit(EXIT_FAILURE); } pfOut = fopen("Output.FILE", "w"); if (NULL == pfOut) { fclose(pfIn); perror("open file for write"); exit(EXIT_FAILURE); } CommentConvert(pfIn, pfOut); printf("注释结束\n"); system("pause"); return 0;}
阅读全文
0 0
- C语言小项目—注释转换
- c语言小项目----注释转换
- C语言小项目---注释转换
- C语言小项目-注释转换
- c语言小项目---注释转换
- C语言小项目--注释转换
- C语言小项目—注释转换( C注释转换为C++注释 )
- 【小项目】注释风格转换(从C语言注释风格转换到C++注释风格)
- C语言小项目制作之---注释转换
- c语言项目-注释转换
- 【C语言项目】注释转换
- c语言注释转换项目
- 注释转换(c->c++)小项目
- C/C++小项目之注释转换
- C的小项目:注释转换
- 注释转换——C语言项目
- 【C语言】注释转换项目实现
- 小项目之C注释转换为C++注释状态
- Spring Boot实战之导出excel
- Include动态指令和静态指令的区别
- Properties类加载properties文件和xml文件
- create file遇到操作系统错误5拒绝访问
- linux学习笔记(3)
- c语言小项目---注释转换
- Common(八)—— 测试一下NetworkManager
- jsp内置对象request
- git 删除提交错误的文件
- Java8 集合元素使用Stream Api进行分组
- Dockerfile构建Nginx实例
- C++笔试题(十二).金山
- JS 账号必须是数字或者字母
- BC95资料