1-23.编写一个删除C语言程序中所有的注释语句。要正确处理带引号的字符串与字符常量。在C语言中,注释不允许嵌套
/*编写一个删除C语言程序中所有的注释语句。要正确处理带引号的字符串与字符常量。在C语言中,注释不允许嵌套*/
#include <stdio.h>
#define MAXLINE 1000
int main() {
int i, a,b,j, c;/*i 记录注释的字符位数 j记录输出中引号内字符数量*/
char s[MAXLINE];
a=b=i = j = c = 0;
while ((c = getchar()) != EOF) {
if (c == '"') { //判断是否在输出的引号内
if (j > 0) {
putchar(c); // 后引号
j = 0;
}
else {
putchar(c); //前引号
j++;
}
}
else if (c == '/') {
if (j > 0) {
putchar(c); //输出的引号内的字符直接输出
j++;
}
else {//不是引号内的字符
if (s[i-1]=='/') { //第二个/
s[i] = c;
i++;
a++;
}
else if (s[i-1]=='*') {
s[i] = c;
i = 0;
}
else {
s[i] = c;
i++;
}
}
}
else if (c == '*') {
if (j > 0) {
putchar(c); //输出的是引号内的字符直接输出
j++;
}
else {
if (i>0) { //判断是注释里面的
s[i] = c;
i++;
}
else {
putchar(c); //不是注释里面的
}
}
}
else if (c == '\n') {
if (i > 0) {
if (a>0) {
a = 0;
}
else{
while (i > 0) {
putchar(s[b]);
b++;
i--;
}
b = 0;
}
putchar(c);
i = 0;
}
else {
putchar(c);
}
}
else {
if (j > 0) { //判断是在输出的引号内
putchar(c);
j++;
}
else {
if (i > 0) { //判断是在注释内
s[i] = c;
i++;
}
else {
putchar(c);
i = 0;
}
}
}
}
return 0;
}
浙公网安备 33010602011771号