码迷,mamicode.com
首页 > 其他好文 > 详细

栈&&行编辑程序

时间:2015-05-11 08:55:07      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:   结构   typedef   

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

#include<iostream>
#include<assert.h>
using namespace std;

typedef char ElemType;
#define STACK_MAX_SIZE 20

typedef struct Stack
{
	ElemType *base;
	int top;
	int capacity;
}Stack;
void InitStack(Stack *stack);
bool isfull(Stack *stack);
bool isempty(Stack *stack);
bool push(Stack *stack,ElemType x);
ElemType pop(Stack *stack,ElemType *x);
bool show_stack(Stack *stack);
ElemType GetTop(Stack *stack,ElemType *x);
void clear(Stack *stack);
void destroy(Stack *stack);
#endif //_SEQSTACK_H_
Seqstack.cpp
#include"Seqstack.h"


void InitStack(Stack *stack)
{
	stack->base = (ElemType *)malloc(sizeof(ElemType)*STACK_MAX_SIZE);
	//stack->base = (ElemType *)malloc(sizeof(ElemType));
	assert(stack->base != NULL);
	stack->top = 0;
	stack->capacity = STACK_MAX_SIZE;
}

bool isfull(Stack *stack)
{
	return stack->top == stack->capacity;
}

bool isempty(Stack *stack)
{
	return stack->top == 0;
}

bool push(Stack *stack,ElemType x)
{
	if(isfull(stack))
		return false;

	stack->base[stack->top++] = x;
	return true;
}

ElemType GetTop(Stack *stack,ElemType *x)
{
	if(isempty(stack))
	{
		cout<<"栈空!"<<endl;
	}

	return stack->base[stack->top-1];
}

bool show_stack(Stack *stack)
{
	if(isempty(stack))
		return false;
	for(int i = stack->top-1;i>=0;--i)
		cout<<stack->base[i]<<endl;
	return true;
}

void clear(Stack *stack)
{
	stack->top = 0;
}

void destroy(Stack *stack)
{
	clear(stack);
	free(stack->base);
	stack->capacity = 0;
}

ElemType pop(Stack *stack,ElemType *e)
{
	if(isempty(stack))
		return false;
	*e = stack->base[--stack->top];
	return true;
}
main.cpp
<pre name="code" class="cpp">#include"Seqstack.h"

void LineEdit()
{
	Stack st;
	Stack st2;
	int ch;
	char e;
	InitStack(&st);
	InitStack(&st2);
	cout<<"please input:";
	ch = getchar();
	while(ch != EOF)
	{	
		while(ch!=EOF && ch!='\n')
		{
			switch(ch)
			{
			case '#':
				if(!isempty(&st))
					pop(&st,&e);
				break;
			case '@':
				clear(&st);
				break;
			default :
				if(!isfull(&st))
					push(&st,ch);
				break;
			}
			ch = getchar();
		}
		while(st.top>0)
		{
			 pop(&st, &e);  
            push(&st2, e);
		}
		cout<<"now:";
		while(st2.top>0)
		{
			pop(&st2,&e);
			cout<<e;
		}
		cout<<endl;
		clear(&st);
		clear(&st2);
		cout<<"please input:";
		if(ch!=EOF)
			ch = getchar();
	}
	destroy(&st);
	destroy(&st2);
}
int main(void)
{
	LineEdit();
	return 0;
}
输出:
技术分享

栈&&行编辑程序

标签:   结构   typedef   

原文地址:http://blog.csdn.net/chenmengmengx/article/details/45629443

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!