栈的应用之行编辑程序

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);
 }
时间: 2024-10-25 22:52:36

栈的应用之行编辑程序的相关文章

行编辑程序、括号匹配检验

行编辑程序.括号匹配检验程序都是利用的栈的数据结构.而这两个 小程序也非常好的显示了栈先进后出的思想.由于程序本身很简短.清晰,所 以也就不做多的解释了,直接上代码了. 行编辑程序: #include<iostream> #include<stack> using namespace std; int main() { stack<char> sta; char ch = getchar(); while(ch!=EOF) { while(ch!=EOF&&am

行编辑程序

一个简单的行编辑程序的功能是:接受用户从终端输入的程序或数据,并存入用户的数据区.由于用户在终端进行输入时,不能保证不出差错,因此,若在编辑程序中,"每接受一个字符即存入用户数据区"的做法显然不是最恰当的.较好的做法是,设立一个输入缓冲区,用以接受用户输入的一行字符,然后逐行存入用户数据区.允许用户输入出差错,并在发现有误时可以及时更正.例如,当用户发现刚刚键入的行内差错较多或难以补救,可以键入一个退行符"@",以表示当前行中的字符均无效.例如,假设从终端接受了这样

数据结构-行编辑程序

一个简单的行编辑程序的功能是:接受用户从终端输入的程序或数据,并存入用户的数据区.由于用户在终端上进行输入时,不能保证不出差错,因此,若在行编辑程序中“每接受一个字符即存入用户区”的做法显然是不恰当的.较好的做法是,设立一个输入缓冲区,用以接收用户输入的一行字符,然后逐行存入用户数据区.允许用户输入出差错,并在发现有误时及时改正.例如:当用户发现刚刚建入的一个字符是错的时,可补进一个退格符“#”,以表示前一个字符无效:如果发现当前键入的行内差错较多或难以补救,则可以输入一个退格符“@”,以表示当

C语言实现行编辑程序(严蔚敏老师数据结构3.2)

-------------------------------------------- /**************************************************//* 行编辑程序 *//* 输入的数据存入缓冲区用来接收用户输入的一行字符 *//* 之后逐行存入用户数据区 *//* 当用户输入出错时可以输入退格符 # 来表示前一个字符无效 *//* 输入@ 表示当前行中之前输入的字符无效 *//************************************

堆栈练习3—行编辑程序

输入文件 LineEditor.in 输出文件 LineEditor.out [题目描述]行编辑程序(LineEditor.c/cpp/pas) 为了保证用户的正确输入,上古文明遗迹入口提供了一个简单的行编辑程序,它的功能是:接收用户从终端输入的程序或数据,并存入用户的数据区.由于用户在终端上进行输入时,不能保证不出差错,因此若在编辑程序中,"每接收一个字符即存入用户数据区的做法"显然不是最恰当的.较好的做法是:设立一个输入缓冲区,用以接收用户输入的一行字符,然后逐行存入用户数据区.程

9、蛤蟆的数据结构笔记之九栈的应用之行编辑实现

9.蛤蟆的数据结构笔记之九栈的应用之行编辑实现 本篇名言:"人生照例是一场值得一搏的争衡,然而它的奖品是拼斗." 继续栈结构的应用,行编辑. 欢迎转载,转载请标明出处: 1.  行编辑 行编辑的功能是接受用户从终端输入的程序或数据.每接受一个字符即存入用户数据区的做法不是最恰当的.好的做法是建立一个缓存区,允许洪湖输入出错,并在发现有无时可以及时更正.用栈来实现这个输入缓冲区是非常适合的. 每当从终端接受了一个字符后先作判别,如果不是退格符也不是退行符,则将该字符压入栈顶:如果是退格符

栈&amp;&amp;行编辑程序

如果遇到'#',表示后退一格,即前一字符无效,如果遇到@,表示前一单词无效,即退出到空格或所在行头为止.采用栈实现. 输入:whli##ilr#e(s#*s++) 输入包含若干行,由各种字符构成. 输出:while(*s++) 利用描述规则输出最后的文本内容. Seqstack.h #ifndef _SEQSTACK_H_ #define _SEQSTACK_H_ #include<iostream> #include<assert.h> using namespace std;

【数据结构】栈的应用--行编辑程序(c++)

头文件: #pragma once #include <iostream> #include <assert.h> using namespace std; template<class Type> class SeqStack { public: SeqStack(size_t sz = INIT_SZ); ~SeqStack(); public: bool empty()const; bool full()const; void show()const; bool

数据结构 栈的应用——行编辑程序

1 #include <stdio.h> 2 #include <malloc.h> 3 #include <stdlib.h> 4 #include <math.h> 5 6 #define STACK_INIT_SIZE 100 //存储空间åˆ?始分é…?é‡? 7 #define STACKINCREMENT 10 //存储空间分é…?å¢?é‡? 8 #define SElemType char //å½