顺序栈的应用三:行编辑
行编辑程序
一个简单的行编辑程序的功能是:接收用户从终端输入的程序或数据,并存入用户的数据区。由于用户在终端上进行输入时,不能保证不出差错,因此若在编辑程序中,”每接收一个字符即存入用户数据区“的做法显然不是最恰当的。
较好的做法是,设立一个输入缓冲区,用以接受用户输入的一行字符,然后逐行存入用户数据区。允许用户输入出差错,并在发现有误时可以及时更正,
例如,当用户发现刚刚键入的一个字符是错的时,可补进一个退格符‘#’,以表示前一个字符无效;如果发现当前键入的行内差错较多或难以补救,则可以键入一个退行符‘@’,以表示当前行中的字符均无效。
例如,假设从终端接收了这样两行字符:
1 | whli##ilr#e(s#*s) |
则实际有效的是下列两行:
1 | while(*s) |
为此,可设这个输入缓冲区为一个栈结构,每当从终端接受了一个字符之后先作如下判别:
如果它既不是退格符‘#’,也不是退行符‘@’,则将该字符压入栈顶;
如果是一个退格符,则从栈顶删去一个字符;
如果是一个退行符,则将字符栈清为空栈。
LineEdit.c利用了前面的C封装的顺序栈对象 用线性表表示的顺序栈
实现了简单的行编辑功能。
LineEdit.c文件
1 | #include <stdio.h> |
编译:
1 | gcc LinearListStack.c LinearListStack.h LineEdit.c -o LineEdit |
运行LineEdit,输入:
1 | whli##ilr#e(s# *s) |
程序输入回车后进行下一行的输入,要想结束程序,需要输入EOF结束符。
在windows平台,EOF的输入是在一个新行的开头输入ctrl + z;
在unix环境下,EOF的输入是在一个新行的开头输入ctrl + d。
本文标题:顺序栈的应用三:行编辑
文章作者:Mr Bluyee
发布时间:2018-08-31
最后更新:2019-07-15
版权声明:The author owns the copyright, please indicate the source reproduced.