删除C语言程序中的所有注释语句
思路:关键是设置一个变量state代表当前状态,如下:
#define IN_MULTI_ANN 3 /* 当前处于多行注释 */
#define IN_SINGLE_ANN 2 /* 当前处于单行注释 */
#define IN_QUO 1 /* 当前处于双引号内 */
#define OUT 0 /* 除了上述3种以外的情况 */
用不同的状态变量值,代表当前读入字符所处哪种位置中。明确不同状态的起始与终止条件,即可知道当前字符是应该保留(用字符数组source
保存)还是删除。需要留意,字符串中的一些特殊情况,比如 "\\t \' \""
中包含转义字符,空字符串""
等。
详细请看代码注释:
/* P25 练习1-23 删除C程序中的所有注释语句。C语言中,注释不允许嵌套 */
#include <stdio.h>
#define MAX_LENGTH 10000 /* C程序最多的字符个数 */
#define IN_MULTI_ANN 3 /* 当前处于多行注释 */
#define IN_SINGLE_ANN 2 /* 当前处于单行注释 */
#define IN_QUO 1 /* 当前处于双引号内 */
#define OUT 0
void delete_annotation(){
/* 删除输入的C程序中的所有注释 */
char source[MAX_LENGTH]; /* 保存删除注释后的内容 */
int index = 0; /* 数组索引 */
int c,state,next; /* next:c的下一个字符 */
state = OUT;
while((c&#