codevs 4650 破損的鍵盤(stl)

*PS:現學的list 打起來好心累QAQ

go to the problem–>

題目描述 Description

有一天,你需要打一份文件,但是你的鍵盤壞了,上面的”home”鍵和”end”鍵會時不時地按下,而你卻毫不知情,甚至你都懶得打開顯示器,當你打開顯示器之後,出現在你的面前的是一段悲劇的文本。

輸入描述 Input Description

輸入只有一行,即這份文件,這份文件只包含小寫字母和’[‘以及’]’,用’[‘代替”home”鍵,用’]’代替”end”鍵。

輸出描述 Output Description

你的任務是在打開顯示器之前,計算出這份悲劇的文檔。

樣例輸入 Sample Input

kdg[gek]h[itj

de[co]vs

樣例輸出 Sample Output

itjgekkdgh

codevs

數據範圍及提示 Data Size & Hint

包含多組測試數據,直到文件結束。

字符串長度小於10000個字符。

不包含空格。

雙端鏈表,本來想着有空打打的,可是清北的老師講了list,所以就拿來練練了QWQ。

home就是從頭插入,end是從尾插入。

代碼

#include<iostream>
#include<list> // 雙端鏈表 
using namespace std;

string a;
list<char> b;
list<char>::iterator f;

int main()
{
    while(cin>>a)
    {

        int l=a.length();f=b.begin();
        for(int i=0;i<l;++i)
        {
            if(a[i]=='[') f=b.begin(); //把f移到鏈表頭部
            else if(a[i]==']') f=b.end(); //把f移到鏈表尾部
            else  b.insert(f,a[i]);  // f會隨着插入而後移 
        }
        while(!b.empty()) 
        {
            cout<<b.front();
            b.pop_front();
        }
        cout<<'\n';
    }
    return 0;   
}

//http://www.cplusplus.com/reference/list/list/insert/
//http://www.cplusplus.com/reference/list/list/push_back/ 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章