乙個簡單的行編輯程式的功能是:接收使用者從終端輸入的程式或資料,並存入使用者的資料區。由於使用者在終端上進行輸入時,不能保證不出差錯,因此,若在編輯程式中,「每接收乙個字元即存入使用者資料區」的做法顯然不是很恰當。較好的做法是,設立乙個輸入緩衝區,用以接收使用者輸入的一行字元,然後逐行存入使用者資料區。允許使用者輸入出差錯,並在發現有誤時可以及時更正。例如,當使用者發現剛剛鍵入的乙個字元是錯的時,可補進乙個退格符「#」,以表示前乙個字元無效;如果發現當前鍵入的行內錯誤較多或難以補救,則可以鍵入乙個退行符「@」,以表示當前行中的字元均無效。例如假設從終端接收了這樣的兩行字元:whil##ilr#e(s#*s)
outcha@ putchar(*s=#++);
則實際有效的是下列兩行:
while(*s)
putchar(*s++);
為此,可設這個輸入緩衝區為乙個棧結構,每當從終端接收了乙個字元之後先作如下判別:如果它不是退格符也不是退行符,則將該字元壓入棧頂;如果是乙個退格符,則從棧頂刪去乙個字元;如果它是乙個退行符,則將字元棧清為空棧。上述處理過程可用下面演算法描述之:
若干行程式或者資料,每行不超過200個字元。
經過行編輯程式處理過後的輸出。
whil##ilr#e(s#*s)outcha@ putchar(*s=#++);
while(*s)putchar(*s++);
#include#includeint top = -1;
char ch;
char a[20000];
int main()
else if(ch=='@')
else
ch = getchar();
}int i = 0;
while(i <= top)
top = -1;
putchar('\n');
if(ch != eof)}}
棧 行編輯程式
如果遇到 表示後退一格,即前一字元無效,如果遇到 表示前一單詞無效,即退出到空格或所在行頭為止。採用棧實現。輸入 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...
DS 行編輯程式
題目描述 乙個簡單的行編輯程式的功能是 接收使用者從終端輸入的程式或資料,並存入使用者的資料區。由於使用者在終端上進行輸入時,不能保證不出差錯,因此,若在編輯程式中,每接收乙個字元即存入使用者資料區 的做法顯然不是很恰當。較好的做法是,設立乙個輸入緩衝區,用以接收使用者輸入的一行字元,然後逐行存入使...