堆疊練習3 行編輯程式

2022-03-13 05:22:31 字數 1199 閱讀 9949

輸入檔案

lineeditor.in

輸出檔案

lineeditor.out

【題目描述】行編輯程式(lineeditor.c/cpp/pas)

為了保證使用者的正確輸入,上古文明遺跡入口提供了乙個簡單的行編輯程式,它的功能是:接收使用者從終端輸入的程式或資料,並存入使用者的資料區。由於使用者在終端上進行輸入時,不能保證不出差錯,因此若在編輯程式中,「每接收乙個字元即存入使用者資料區的做法」顯然不是最恰當的。較好的做法是:設立乙個輸入緩衝區,用以接收使用者輸入的一行字元,然後逐行存入使用者資料區。程式允許使用者輸入出差錯,並在發現有誤時可以及時更正。例如當使用者發現剛剛鍵入的乙個字元是錯的時,可以補進乙個退格符「#」,以表示前乙個字元無效;如果發現當前鍵入的行內差錯較多或難以補救,則可以鍵入乙個退行符「@」,以表示當前行中的字元均無效。例如,假設從終端接收了這樣兩行字元:

whil#lr#e(s#*s)

outcha@putchar(*s=#++);

則實際有效的是下列兩行:

while(*s)

putchar(*s++);

為此,可設這個輸入緩衝區為乙個棧結構,每當從終端接收了乙個字元之後先作如下判別:如果它既不是退格符也不是退行符,則將該字元壓入棧頂;如果是乙個退格符,則從棧頂刪去乙個字元;如果它是乙個退行符,則將字元棧清為空棧。

【輸入格式】

輸入檔案為lineeditor.in。

【輸出格式】

輸出檔案為lineeditor.out,為最終的正確字串。

【輸入樣例】

whil#lr#e(s#*s)

【輸出樣例】

while(*s)

以下為**(無須解釋,過於簡單)

1 #include2 #include3 #include4

using

namespace

std;

5strings;6

intmain()720

if(s[i]=='#'

)2124else

25 a[++z]=s[i];26}

27for(int i=0;i<=z;i++)

28 cout<29if(a=="

o(∩_(*^__^*)

")cout<<"";

30 cout<32return0;

33 }

堆疊的應用 行編輯程式

均已除錯通過,編譯器為dev c 行編輯程式 include define stack size 100 define max 500 typedef struct sqstack,pstack void initstack pstack s void push pstack s,char ch v...

棧 行編輯程式

如果遇到 表示後退一格,即前一字元無效,如果遇到 表示前一單詞無效,即退出到空格或所在行頭為止。採用棧實現。輸入 whli ilr e s s 輸入包含若干行,由各種字元構成。輸出 while s 利用描述規則輸出最後的文字內容。seqstack.h ifndef seqstack h define...

棧 行編輯程式

include include include include typedef char datatype include seqstack.h void lineedit void main void lineedit 行編輯程式 ch getchar 讀入下乙個字元 while stackemp...