#include<iostream>
#include"SqStack.h"
using namespace std;
void LineEdit(SqStack &S,SqStack &SS)
{
SElemType e,ch;
SOP.InitStack(S);
SOP.InitStack(SS);
ch=getchar();//从终端接收一个字符
while(ch!=EOF)//EOF为全文结束符
{
if(ch!=EOF&&ch!='\n')
switch(ch)
{
case '#':
SOP.Pop(S,e);//若是‘#’表明前一个输入字符无效,则应从栈中清除
break;
case '@':
SOP.ClearStack(S);//若是‘@’,表明该行字符均无效,则应清空栈,存储下一行的字符
break;
default:
SOP.Push(S,SS,ch);
}//switch
else
{
int num=S.top-S.base;
char *pt=new char[num];//建立一个临时字符数组,用来存放从S中弹出的值
while(S.top!=S.base)
{
SOP.Pop(S,e);//将数据依次弹出栈S,顺便将栈清空用于下一行数据的存储
*(pt++)=e;//将弹出的数据存放到临时字符数组中
}//while
//从后向前输出数组元素,实现对栈S中元素从栈底到栈顶的输出,而SOP.StackTraversal只能实现后进先出
for(int i=1;i<=num;i++)
cout<<*(--pt);//pt先减1的原因是在(*p
栈的应用举例——行编辑程序
最新推荐文章于 2020-07-17 19:55:42 发布