DS 行編輯程式

2021-09-28 23:38:41 字數 1079 閱讀 8131

題目描述

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

whil##ilr#e(s#*s)

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

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

while(*s)

putchar(*s++);

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

輸入若干行程式或者資料,每行不超過200個字元。

輸出經過行編輯程式處理過後的輸出。

樣例輸入 copy

whil##ilr#e(s#*s)

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

樣例輸出 copy

while(*s)

putchar(*s++);

#include

#include

#include

"string.h"

char st[

251]

;int top;

void edit (

char str,

int len)

}else

if(str[i]

=='@'

)else}}

void print (

)printf

("\n");

}int

main()

return0;

}

棧 行編輯程式

如果遇到 表示後退一格,即前一字元無效,如果遇到 表示前一單詞無效,即退出到空格或所在行頭為止。採用棧實現。輸入 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...

演算法3 2 行編輯程式

乙個簡單的行編輯程式的功能是 接收使用者從終端輸入的程式或資料,並存入使用者的資料區。由於使用者在終端上進行輸入時,不能保證不出差錯,因此,若在編輯程式中,每接收乙個字元即存入使用者資料區 的做法顯然不是很恰當。較好的做法是,設立乙個輸入緩衝區,用以接收使用者輸入的一行字元,然後逐行存入使用者資料區...