码迷,mamicode.com
首页 > 其他好文 > 详细

栈的应用之行编辑程序

时间:2016-04-05 00:37:24      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:

Description

利用栈编写简单的行编辑程序:接受用户从终端输入的程序或数据,在输入过程中,允许用户输入出差错,并在发现有误时可以及时更正。例如:当用户发现刚刚键入的一个字符是错的时,可以补进一个退格符“#”,以表示前一个字符无效;如果发现当前键入的行内差错较多或难以补救,则可以键入一个退行符“@”,以表示当前行中的字符均无效。例如:假设从终端接受了这样两行字符: whli##ilr#e (s#*s) outcha@putchar(*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);
 }

 

栈的应用之行编辑程序

标签:

原文地址:http://www.cnblogs.com/LizG192/p/5353364.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!