c语言实现去除代码中的注释
2016-02-17 17:06
489 查看
c语言实现去除代码中的注释。
算法思想:把文件中内容一个字符一个字符的取出来,把字符分成9种状态,在正常不是注释的状态内字符复制给字符串,在遇到注释
内的字符时,直接寻找下一个字符,不复制给字符串,一直到转换到正常状态。
代码实现如下:
算法思想:把文件中内容一个字符一个字符的取出来,把字符分成9种状态,在正常不是注释的状态内字符复制给字符串,在遇到注释
内的字符时,直接寻找下一个字符,不复制给字符串,一直到转换到正常状态。
代码实现如下:
#include <stdio.h> #include <stdlib.h> #include <string.h> #define STATE_0 0 /*正常状态*/ #define STATE_1 1 /* / */ #define STATE_2 2 /* // */ #define STATE_3 3 /* /* */ #define STATE_4 4 /* /** */ #define STATE_5 5 /* ' */ #define STATE_6 6 /* ·\ */ #define STATE_7 7 /* " */ #define STATE_8 8 /* "\ */ int main(int arg,char **argv){ FILE *fp=fopen((char*)argv[1],"r+w"); // char *p="name=22; //this is a test"; char ch; int state = 0; char buf[4096]; char *tmp = buf; while((ch = fgetc(fp)) != EOF){ // ch = *p; // while(ch!='\0'){ //ch = *p++; if(state==STATE_0 && ch=='/'){ state = STATE_1; }else if(state ==STATE_0 && ch=='\''){ state = STATE_5; *tmp++ = ch; }else if(state ==STATE_0 && ch=='\"'){ state = STATE_7; *tmp++ = ch; }else if(state==STATE_0){ state = STATE_0; *tmp++ = ch; /*状态1的状态切换*/ }else if(state==STATE_1 && ch=='/'){ state = STATE_2; }else if(state==STATE_1 && ch=='*'){ state = STATE_3; }else if(state==STATE_1){ state = STATE_0; *tmp++ = '/'; /* 比如 5/3 的情况 */ *tmp++ = ch; /*状态2的切换*/ }else if(state == STATE_2 && ch == '\n'){ state = STATE_0; *tmp++ = '\n'; }else if(state == STATE_2){ state == STATE_2; /*状态3的切换*/ }else if(state == STATE_3 && ch == '*'){ state = STATE_4; }else if(state == STATE_3){ state = STATE_3; /*状态4的切换*/ }else if(state == STATE_4 && ch == '/'){ state = STATE_0; }else if(state == STATE_4){ state = STATE_3; /*状态5切换*/ }else if(state == STATE_5 && ch == '\\'){ state = STATE_6; *tmp++ = ch; }else if(state == STATE_5 && ch == '\''){ state = STATE_0; *tmp++ = ch; }else if(state == STATE_5){ state = STATE_5; *tmp++ = ch; /*状态6切换*/ }else if(state == STATE_6){ state = STATE_5; *tmp++ = ch; /*状态7的切换*/ }else if(state == STATE_7 && ch =='\\'){ state = STATE_8; *tmp++ = ch; }else if(state == STATE_7 && ch =='\"'){ state = STATE_0; *tmp++ = ch; }else if(state == STATE_7){ state = STATE_7; *tmp++ = ch; /*状态8的切换*/ }else if(state ==STATE_8 ){ state = STATE_7; *tmp++ = ch; } //printf("ch=%c,state=%d\n",ch,state); } *tmp = '\0'; printf("%s\n",buf); return 0; }
相关文章推荐
- gtest(C++单元测试框架)
- C++文件操作与文件流
- C语言typedef详解
- C语言 预处理二(宏定义--#define)
- 碰到的C语言的关于循环取数的方法
- 关于C语言加密的算法
- C++ 模板元中巧用异常让字符串储存在指定类型的tuple中
- 自己用C++写的图像处理软件试用版下载
- c++ 惯用法:定界加锁
- C语言 预处理一(文件包含--#include)
- C++简单实现对象引用计数示例
- 从头再来,C++学习笔记。-01(初窥C++)
- 递归字符串C++编程(1)
- UVa 10474 Where is the Marble?
- 合并石子c++
- leetcode刷题系列C++-Longest Consecutive Sequence
- c++ vector赋值
- C++中的异常操作:throw&try&catch
- c++内存分配
- C++结构(structure)详解