1. 程式人生 > >Mr.J--藍橋杯--去註釋

Mr.J--藍橋杯--去註釋

問題
  給你一段C++程式碼,將其中的註釋去除後輸出剩餘的程式碼。
  註釋共有兩種形式:
  1. 行注視:以//開頭,一直作用到行尾為止。
  例子:
  int n;//n表示資料規模
  int a;
  去註釋後:
  int n;
  int a;
  注意:保留行尾換行符
  2. 段注視:以/*開頭,到*//結尾,中間部分都是註釋,可以跨行。
  例子:
  int main() {
  /*
  我是
  一段
  註釋
  */
  }
  去註釋後:
  int main() {

  }
  注意:由於線上評測系統(Online Judge)對網頁顯示文字作了格式化,一些空行會被刪去,導致上面顯示的刪除後的結果不正確。刪除註釋後,剩餘的程式碼應該是三行,兩行程式碼之間有一個空行。這是因為:在段註釋結尾符的後面有一個換行符,它不在註釋內,需要保留。
輸入格式
  一段C++程式程式碼
輸出格式
  去掉註釋部分後的程式
樣例輸入
int main() {
/*
我是
一段
註釋
*/
int n;//n表示資料規模
}
樣例輸出
int main() {

int n;
}
 

#include <stdio.h>
#include <string.h>
char a[10000];
int main()
{
	int i = 0;
	while ((a[i] = getchar()) != EOF)
	{
		if (a[i] == '/')
		{
			a[i + 1] = getchar();
			if (a[i + 1] == '*')
			{
				while ((a[i + 1] = getchar()) != '/'&&a[i] != '*');
				a[i] = getchar();
				putchar(a[i]);
				i++;
			}
			else if (a[i + 1] == '/')
			{
				while ((a[i] = getchar()) != '\n')
					a[i] = '\n';
				putchar(a[i]);
				i++;
			}
			else
			{
				putchar(a[i]);
			putchar(a[i + 1]);
				i++;
			}
		}
		else
		{
			putchar(a[i]);
			i++;
		}
	}
	return 0;
}