有了前两个辅助推导,这一个也变简单很多了啊
问题:将程序中所有的注释删掉,不包括在单,双引号内的(这行当时没看到所以没做..其实也很简单,再加一个if的事情,所以饶了我叭:p)

#include <stdio.h>
#define In 0
#define MAXCODE 2000
#define None 1
#define NON 0
main() {
	int c,key,w,past;
	key = w = past = NON;
	char di[MAXCODE];
	//past:上一受检测字符字符 w:是否在注释环境中 key:下一‘和解’前置词
	while ((c=getchar())!=EOF) {
		if (w == None) {
			if (key == '\n') {
				if (c == '\n') { key = NON; w = In; past = NON; }//释放条件
			}
			else if (key == '*') {
				if (past =='*') {
					if (c == '/') { key = NON; w = In; past = NON; }
					else past = NON;
				}
			}
		}	
		else {
			if (past == '/') {
				if (c == '/') {
					w = None;
					key = '\n';
				}
				else if (c == '*') {
					w = None;
					key = '*';
				}
				else {
					printf("%c%c", past, c); 
					past = NON;
				}
			}
			else if (c == '/') past = '/';
			else putchar(c);
		}
	}
}
//这个用于测试/*/*
/*这个用于测试*/

/*这个
用于
//
//
测试*/

若是将上面的代码丢进去喂他:
输出结果将对下一行进行即时输出,所以看起来很怪;但是在应用中将printf给替换成其他的我感觉这样不会出现丢包率百分百的问题,所以没改结构
成单说明被删了一个了,成双说明和原来一样

#include <stdio.h>
#include <stdio.h>
#define In 0
#define In 0
#define None 1
#define None 1
#define NON 0
#define NON 0
main() {
main() {
int c,key,w,past;
int c,key,w,past;
key = w = past = NON;
key = w = past = NON;
//past:上一受检测字符字符 w:是否在注释环境中 key:下一‘和解’前置词
while ((c=getchar())!=EOF) {
while ((c=getchar())!=EOF) {
if (w == None) {
if (w == None) {
if (key == '\n') {
if (key == '\n') {
if (c == '\n') { key = NON; w = In; past = NON; }//释放条件
if (c == '\n') { key = NON; w = In; past = NON; }}
}
else if (key == '*') {
else if (key == '*') {
if (past =='*') {
if (past =='*') {
if (c == '/') { key = NON; w = In; past = NON; }
if (c == '/') { key = NON; w = In; past = NON; }
else past = NON;
else past = NON;
}
}
}
}
}
}
else {
else {
if (past == '/') {
if (past == '/') {
if (c == '/') {
if (c == '/') {
w = None;
w = None;
key = '\n';
key = '\n';
}
}
else if (c == '*') {
else if (c == '*') {
w = None;
w = None;
key = '*';
key = '*';
}
}
else {
else {
printf("%c%c", past, c);
printf("%c%c", past, c);
past = NON;
past = NON;
}
}
}
}
else if (c == '/') past = '/';
else if (c == '/') past = '/';
else putchar(c);
else putchar(c);
}
}
}
}
}
}
//这个用于测试/*/*
/*这个用于测试*/

/*这个
用于
//
//
测试*/

更多文章请关注《万象专栏》