栈的应用之行编辑程序

Posted 北方暴雪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了栈的应用之行编辑程序相关的知识,希望对你有一定的参考价值。

Description

利用栈编写简单的行编辑程序:接受用户从终端输入的程序或数据,在输入过程中,允许用户输入出差错,并在发现有误时可以及时更正。例如:当用户发现刚刚键入的一个字符是错的时,可以补进一个退格符“#”,以表示前一个字符无效;如果发现当前键入的行内差错较多或难以补救,则可以键入一个退行符“@”,以表示当前行中的字符均无效。例如:假设从终端接受了这样两行字符: whli##ilr#e (s#*s) [email protected](*s=#++); 则实际有效的是下列两行: while (*s) putchar(*s++); 本题目给出部分函数,要求将行编辑函数补充完整,并完成整个程序。

思路:判断字符是否为‘#’,是则删除栈顶元素,否则将字符压进栈;判断字符是否为‘@’,是则清空栈,否则将字符压进栈;

代码演示:

void LineEdit()
 { 
   SqStack s;
   char ch,c;
   int n,i;
   InitStack(s);
   scanf("%d",&n);
   ch=getchar();
   for(i=1;i<=n;i++)
   { ch=getchar();
     while(ch!=\n)
    {
       switch(ch)
       {
         case #:Pop(s,c);
                  break; // 仅当栈非空时退栈
         case @:ClearStack(s);
                  break; // 重置s为空栈
         default :Push(s,ch); // 有效字符进栈
       }
       ch=getchar(); // 从终端接收下一个字符
     }
     StackTraverse(s,visit); // 将从栈底到栈顶的栈内字符输出
    ClearStack(s); // 重置s为空栈
    }
   DestroyStack(s);
 }

 

以上是关于栈的应用之行编辑程序的主要内容,如果未能解决你的问题,请参考以下文章

数据结构-栈的使用之行编辑程序

数据结构-栈的使用之行编辑程序

GTK经常使用控件之行编辑( GtkEntry )

shell编程之行编辑器 - sed 对文件进行操作

shell编程之行编辑器 - sed 对文件进行操作

数据结构入门栈的应用