藍橋杯 算法提高 去注釋


  算法提高 去注釋  
時間限制:1.0s   內存限制:256.0MB
    
  
  去注釋
問題
  給你一段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;
}

注意:和之前題目中的解釋一樣,在int n;之前有一個空行,被在線評測系統刪掉,實際程序輸出應該有該空行。
輸入方法
  此題按字符輸入,即不斷輸入下一個字符,直到字符流結束。
  char c;
  C函數方法:
  while ((c = getchar()) != EOF) {
  處理..
  }
  C++流方法:
  while ((c = cin.get()) != EOF) {
  處理..
  }


已經通過測試:100%
#include<iostream>
#include<string>
using namespace std;
int main()
{
	string s[100001];
	int k=0,i=0,j=0,w,q;
	while(getline(cin,s[i])){
		i++;
		k++;
	}
	for(i=0;i<k;i++){
		int len=s[i].length();
		for(j=0;j<len;j++){
			if(s[i][j]=='/'&&s[i][j+1]=='/'){
				s[i].erase(j,len-j);
				break;                  //跳出該次循環 
			}
			if(s[i][j]=='/'&&s[i][j+1]=='*'){
				for( w=i+1;w<k;w++){                  //查找對應的*/           循環 1 
					int flag=0;
					for(q=0;q<s[w].length();q++)                           //循環   2 
					if(s[w][q]=='*'&&s[w][q+1]=='/')            
					{
						i+=w-i;
						s[w].erase(0,s[w].length());
						flag=1;                     //標記是否找到*/,如果找到,flag=1; 
						break;                     //跳出內層循環  2
					}
					if(flag==1)		
					break;                         //對應於flag,跳出 循環  2
				}
			}
		}
		cout <<s[i]<<endl;
	}
	return 0;
}



注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com