行编辑程序

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

whli##ilr#e(s#*s)

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

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

typedef char SElemType;
FILE *fp;

void copy(SElemType c){//将字符c送至fp所指的文件中
    fputc(c, fp);
}

void LineEdit(){//利用字符栈s,从终端接收一行并送至调用过程的数据区
    SqStack s;
    char ch;
    InitStack(s);
    printf("请输入一个文本文件,^z结束输入:\n");
    ch = getchar();
    while (ch != EOF)//当全文未结束(EOF为^Z键,全文结束符)
    {
        while (ch != EOF && ch != ‘\n‘){//当全文未结束且未到行末(不是换行符)
            switch (ch)
            {
            case ‘#‘:if (!StackEmpty(s))
                Pop(s, ch);//仅当栈非空时弹出栈顶元素,c可由ch替代
                break;
            case ‘@‘:ClearStack(s);
                break;
            default:Push(s, ch);
                break;
            }
            ch = getchar();
        }//到行末或全文结束,退出此层循环
        StackTraverse(s, copy);//将从栈底到栈顶的栈内字符依次传送至文件(调用copy()函数)
        fputc(‘\n‘, fp);//向文件输入一个换行符
        ClearStack(s);//重置s为空栈
        if (ch != EOF)//全文未结束
            ch = getchar();
    }
    DestroyStack(s);
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-29 03:19:52

行编辑程序的相关文章

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

行编辑程序.括号匹配检验程序都是利用的栈的数据结构.而这两个 小程序也非常好的显示了栈先进后出的思想.由于程序本身很简短.清晰,所 以也就不做多的解释了,直接上代码了. 行编辑程序: #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)

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

堆栈练习3—行编辑程序

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

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

3-3-行编辑程序-栈和队列-第3章-《数据结构》课本源码-严蔚敏吴伟民版

课本源码部分 第3章  栈和队列 - 行编辑程序 ——<数据结构>-严蔚敏.吴伟民版        源码使用说明  链接??? <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明        课本源码合辑  链接??? <数据结构>课本源码合辑        习题集全解析  链接??? <数据结构题集>习题解析合辑        本源码引入的文件  链接? SequenceStack.c        相关测试数据下载  链接? 无数据