編寫程式將C / C++程式碼中的註釋去掉
阿新 • • 發佈:2019-01-30
今天看到一道題,覺得可以拿來鍛鍊一下。就自己做了一遍。
/************************
*功能:輸入合法的C、C++程式,將註釋去掉後輸出
*注意:“//”“/*”等等雙引號之間的字元不予處理,但是/*...*/之間的雙引號也不起作用,即當處於兩個雙引號之間時,/*不起作用,但是如果先有了/*然後出現的雙引號則雙引號不起作用。
*
**************************/
#include<stdio.h>
#include<string.h>
int main() {
char c[1024];
int FLAG=0;//指示是否遇到/*
int quote=-1;//指示是否在引號之中,1在,-1不在
int HasPrint=0;//指示當前行是否有輸出。
while(gets(c)) {
HasPrint=0;
for(int i=0; i<strlen(c); i++) {
if(FLAG) {
if(c[i]=='*'&&c[i+1]=='/') {
FLAG=0;
i++;//跳過 /* 兩個字元的輸出
continue ;
}
} else {
if(c[i]=='"')quote*=-1;
if(quote==-1) { // 如果不在引號之中
if(c[i]=='/'&&c[i+1]=='/') { // 遇到//直接跳過本行 c[i+1]不會越界,最多訪問到'\0'
break;
}
if(c[i]=='/'&&c[i+1 ]=='*') {
FLAG=1;
}
}
if(!FLAG) {
putchar(c[i]);
HasPrint=1;
}
}
}
if(HasPrint)printf("\n");
}
printf("END!");
return 0;
}