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