栈的应用举例——行编辑程序

#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的原因是在(*pt++)操作中当数据输入完成后,pt仍加1,此时因此要先减1
			delete []pt;//销毁临时数组
			cout<<endl;
		}//else
	ch=getchar();
	}//while
	SOP.DestroyStack(S);
	SOP.DestroyStack(SS);
}//LineEdit

void main()
{
	SqStack S,SS;
	LineEdit(S,SS);
}//main


注:#include"SqStack.h"来自:http://blog.csdn.net/u014033518/article/details/38145245

将其中typedef int SElemType 修改为typedef char SElemType

你可能感兴趣的:(栈,行编辑)