堆栈练习3—行编辑程序


输入文件


LineEditor.in


输出文件


LineEditor.out

【题目描述】行编辑程序(LineEditor.c/cpp/pas)

为了保证用户的正确输入,上古文明遗迹入口提供了一个简单的行编辑程序,它的功能是:接收用户从终端输入的程序或数据,并存入用户的数据区。由于用户在终端上进行输入时,不能保证不出差错,因此若在编辑程序中,“每接收一个字符即存入用户数据区的做法”显然不是最恰当的。较好的做法是:设立一个输入缓冲区,用以接收用户输入的一行字符,然后逐行存入用户数据区。程序允许用户输入出差错,并在发现有误时可以及时更正。例如当用户发现刚刚键入的一个字符是错的时,可以补进一个退格符“#”,以表示前一个字符无效;如果发现当前键入的行内差错较多或难以补救,则可以键入一个退行符“@”,以表示当前行中的字符均无效。例如,假设从终端接收了这样两行字符:

Whil#lr#e(s#*s)

[email protected](*s=#++);

则实际有效的是下列两行:

While(*s)

putchar(*s++);

为此,可设这个输入缓冲区为一个栈结构,每当从终端接收了一个字符之后先作如下判别:如果它既不是退格符也不是退行符,则将该字符压入栈顶;如果是一个退格符,则从栈顶删去一个字符;如果它是一个退行符,则将字符栈清为空栈。

【输入格式】

输入文件为LineEditor.in。

【输出格式】

输出文件为LineEditor.out,为最终的正确字符串。

【输入样例】

Whil#lr#e(s#*s)

【输出样例】

While(*s)

以下为代码(无须解释,过于简单)

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 using namespace std;
 5 string s;
 6 int main()
 7 {
 8     while(getline(cin,s))
 9     {
10         string a;
11         int k=s.size(),z=-1;
12         for(int i=0;i<k;i++)
13         {
14             if(s[i]==‘@‘)
15             {
16                 z=-1;
17                 a="";
18                 continue;
19             }
20             if(s[i]==‘#‘)
21             {
22                 if(z!=-1)z--;
23             }
24             else
25                 a[++z]=s[i];
26         }
27         for(int i=0;i<=z;i++)
28             cout<<a[i];
29         if(a=="O(∩_(*^__^*)")cout<<" ";
30         cout<<endl;
31     }
32     return 0;
33 }
时间: 2024-11-08 20:17:55

堆栈练习3—行编辑程序的相关文章

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

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

栈的应用之行编辑程序

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

行编辑程序

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

数据结构-行编辑程序

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

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

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

栈&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;

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

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 //å½

【数据结构】栈的应用--行编辑程序(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

迷宫问题(堆栈及其应用)

首先我们来看看堆栈这个数据结构,像朱老师曾经说的那样堆栈是一个单腔生物,想想一个场景,有一个笔直的路,最远端是死胡同.我们现在让车一个一个的进去,那要出来的的时候必须是后进去的先出来(push和pop操作).对于堆栈这样的数据结构有这些操作: 1.堆栈的初始化和销毁: 2.堆栈清空: 3.判断堆栈是否为空: 4.返回栈顶元素: 5.得到堆栈内元素的个数: 6.压栈与出栈: 堆栈的应用方面非常广泛,例如:数值转换,括号匹配,行编辑程序,迷宫问题和表达式等. 无论是那种应用,都要记住堆栈的最大的功能