您的位置:首页 > 编程语言 > C语言/C++

c语言实现去除代码中的注释

2016-02-17 17:06 489 查看
c语言实现去除代码中的注释。

算法思想:把文件中内容一个字符一个字符的取出来,把字符分成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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: