2016陕西省ACM省赛 HE 字符串处理 删除注释
HE
發(fā)布時(shí)間: 2017年3月27日 18:28?? 最后更新: 2017年3月27日 18:30?? 時(shí)間限制: 1000ms?? 內(nèi)存限制: 256M
描述"Hi there, my name is HE."
在某個(gè)秘密的計(jì)算機(jī)實(shí)驗(yàn)室中,超級(jí)人工智能計(jì)算機(jī) HE 誕生了。
HE 可以在網(wǎng)絡(luò)中搜索合適的程序代碼進(jìn)行自我升級(jí)。在某次升級(jí)的過(guò)程中,HE 得到了一堆軟件代碼,其中有很多注釋和空行。注釋是為了人類能夠讀懂代碼而寫(xiě)的,而對(duì)于 HE 來(lái)說(shuō),它并不需要這些東西,因此它會(huì)首先刪除掉代碼中的所有注釋以及空行。
這里定義了2種注釋格式:
1.行注釋“//”:符號(hào)“//”之后直至行尾的所有內(nèi)容都被認(rèn)為是注釋部分;
2.段注釋“/\* ... \*/”:“/\*”表示段注釋開(kāi)始,“\*/”表示段注釋結(jié)束,其間的所有內(nèi)容都被認(rèn)為是注釋部分。
科學(xué)家發(fā)現(xiàn) HE 的編譯器分析部分出現(xiàn)了一些小問(wèn)題,現(xiàn)在他們希望你能夠編寫(xiě)程序幫助 HE 完成這一步驟。
輸入輸入文件只有一個(gè),其中有許多包含注釋的語(yǔ)言代碼,請(qǐng)讀至文件末尾(EOF)。
輸出 輸出刪除掉注釋之后的代碼。
注:
1.若某一行刪除完注釋之后只剩下空格,則該行也將被視作一個(gè)空行,需要一起刪除。
2.需要同時(shí)刪除行末的空格。
step1()函數(shù)用于去除// 以及/**/這類的注釋,把要?jiǎng)h除的地方標(biāo)記為1,輸出的時(shí)候不輸出就可以了
step2()函數(shù)用于去除多余的空格以及換行。
思路如下:
每次從一行的開(kāi)頭檢測(cè),直到檢測(cè)到'\n'為止,用pre表示該行第一個(gè)空格的位置,如果這一行中有非空格字符,那么標(biāo)志位f = 1
該行檢測(cè)完成以后把beg 到 \n區(qū)間全部刪除掉(置值為1),然后判斷f是否為1,如果不為1,那么\n也要?jiǎng)h除掉
#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;//本行第一個(gè)字符 for(;str[pos] != '\n';pos++){if(str[pos] == 1) continue;//已經(jīng)被刪除過(guò)的字符不必考慮在內(nèi) 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(); }
總結(jié)
以上是生活随笔為你收集整理的2016陕西省ACM省赛 HE 字符串处理 删除注释的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 苹果4铃声怎么设置 5步轻松设置铃声
- 下一篇: 赵文卓电影 赵文卓主演过的电影