1. 程式人生 > >資料結構實驗之棧與佇列九:行編輯器

資料結構實驗之棧與佇列九:行編輯器

Problem Description

一個簡單的行編輯程式的功能是:接受使用者從終端輸入的程式或資料,並存入使用者的資料區。

由於使用者在終端上進行輸入時,不能保證不出差錯,因此,若在編輯程式中,“每接受一個字元即存入使用者資料區”的做法顯然不是最恰當的。較好的做法是,設立一個輸入緩衝區,用以接受使用者輸入的一行字元,然後逐行存入使用者資料區。允許使用者輸入出差錯,並在發現有誤時可以及時更正。例如,當用戶發現剛剛鍵入的一個字元是錯的時,可補進一個退格符"#",以表示前一個字元無效;

如果發現當前鍵入的行內差錯較多或難以補救,則可以鍵入一個退行符"@",以表示當前行中的字元均無效。

如果已經在行首繼續輸入’#'符號無效。 Input

輸入多行字元序列,行字元總數(包含退格符和退行符)不大於250。 Output

按照上述說明得到的輸出。 Sample Input

whli##ilr#e(s#*s) [email protected](*s=#++); Sample Output

while(*s) putchar(*s++);

#include <iostream>
#include <string.h>
using namespace std;

int main()
{
    char A[10000];
    char B[10000];
    while(cin>>A)
    {
        int top=0;
        int len=strlen(A);
        for(int i=0;i<len;i++)
        {
            if(A[i]=='@')
            {
                top=0;
            }
            else if(A[i]=='#'&&top>0)
            {
                top--;
            }
            else if(A[i]=='#'&&top==0)
            {
                continue;
            }
            else
            {
                top++;
                B[top]=A[i];
            }
        }
        for(int i=1;i<=top;i++)
        {
            cout<<B[i];
            if(i==top)
            {
                cout<<endl;
            }
        }
    }
    return 0;
}