日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

2016陕西省ACM省赛 HE 字符串处理 删除注释

發布時間:2023/12/3 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2016陕西省ACM省赛 HE 字符串处理 删除注释 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

HE

發布時間: 2017年3月27日 18:28?? 最后更新: 2017年3月27日 18:30?? 時間限制: 1000ms?? 內存限制: 256M

描述

"Hi there, my name is HE."

在某個秘密的計算機實驗室中,超級人工智能計算機 HE 誕生了。

HE 可以在網絡中搜索合適的程序代碼進行自我升級。在某次升級的過程中,HE 得到了一堆軟件代碼,其中有很多注釋和空行。注釋是為了人類能夠讀懂代碼而寫的,而對于 HE 來說,它并不需要這些東西,因此它會首先刪除掉代碼中的所有注釋以及空行。

這里定義了2種注釋格式:

1.行注釋“//”:符號“//”之后直至行尾的所有內容都被認為是注釋部分;

2.段注釋“/\* ... \*/”:“/\*”表示段注釋開始,“\*/”表示段注釋結束,其間的所有內容都被認為是注釋部分。

科學家發現 HE 的編譯器分析部分出現了一些小問題,現在他們希望你能夠編寫程序幫助 HE 完成這一步驟。

輸入

輸入文件只有一個,其中有許多包含注釋的語言代碼,請讀至文件末尾(EOF)。

輸出

輸出刪除掉注釋之后的代碼。

注:
1.若某一行刪除完注釋之后只剩下空格,則該行也將被視作一個空行,需要一起刪除。
2.需要同時刪除行末的空格。

樣例輸入1?復制 #include<stdio.h> //test int main() {printf("Helloworld.");return 0; } #include<stdio.h> /* ---- ---- */int main() {// testprintf("Goodluck."); // testreturn 0; /* -- */ } 樣例輸出1 #include<stdio.h> int main() {printf("Helloworld.");return 0; } #include<stdio.h> int main() {printf("Goodluck.");return 0; } 題解:

step1()函數用于去除// 以及/**/這類的注釋,把要刪除的地方標記為1,輸出的時候不輸出就可以了

step2()函數用于去除多余的空格以及換行。

思路如下:

每次從一行的開頭檢測,直到檢測到'\n'為止,用pre表示該行第一個空格的位置,如果這一行中有非空格字符,那么標志位f = 1

該行檢測完成以后把beg 到 \n區間全部刪除掉(置值為1),然后判斷f是否為1,如果不為1,那么\n也要刪除掉

#include <cstdio> #include <iostream> using namespace std; char str[1000000]; int length; void read() {char c;while(~scanf("%c",&c))str[length++] = c;str[length++] = '\n';str[length] = 0; } void step1() {char c = str[0];int pos = 0;while(c){if(c == '/'){if(str[pos + 1] == '/')while(str[pos] != '\n') str[pos++] = 1;else if(str[pos + 1] == '*'){while(str[pos + 2] != '*' || str[pos + 3] != '/') str[pos++] = 1; str[pos] = str[pos + 1] = str[pos + 2] = str[pos + 3] = 1;}}c = str[++pos];} } void step2() {char c = str[0];int pos = 0;while(true){if(pos == length) break;int f = 0;int beg = pos;//本行第一個字符 for(;str[pos] != '\n';pos++){if(str[pos] == 1) continue;//已經被刪除過的字符不必考慮在內 if(str[pos] != ' ') {beg = pos + 1;f = 1;}}//pos 指向/nfor(int i = beg;i < pos;i++) str[i] = 1; if(!f) str[pos] = 1;pos ++;}str[length-1] = 1; } void print() {int pos = 0;while(str[pos]){if(str[pos] != 1) putchar(str[pos]);pos++;} } int main() {freopen("test.txt","r",stdin);freopen("out.txt","w",stdout);read();step1();step2();print(); }



總結

以上是生活随笔為你收集整理的2016陕西省ACM省赛 HE 字符串处理 删除注释的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。