//话不多说,代码先行。
#pragma once
#include <stdlib.h>
#include<iostream>
using namespace std;
#define STACK_INIT_SIZE 10
#define OVERFLOW - 2
#define OK 1
#define ERROR 0
typedef char SElemType;
//栈结构体
typedef struct
{
SElemType* base;//栈底
SElemType* top;//栈顶
int stacksize;
}SqStack;
int InitStack(SqStack* S) //初始化栈
{
S->base = (SElemType*)malloc(STACK_INIT_SIZE * sizeof(SElemType));
if (!S->base)
{
exit(OVERFLOW);//OVERFLOW定义为-2
}
S->top = S->base;
S->stacksize = STACK_INIT_SIZE;
return OK;
}
int Push(SqStack* S, SElemType e) //入栈
{
*S->top++ = e;//先赋值在指针自加
return OK;
}
int Pop(SqStack* S, SElemType* e)//删除栈中的元素
{
if (S->top == S->base) return ERROR;//ERROR定义为0
*e = *--S->top;
return OK;
}
int ClearStack(SqStack* S)//清空栈中的元素
{
S->top = S->base;
return OK;
}
int DestoryStack(SqStack* S)//销毁栈
{
S->top = S->base;
free(S->base);
S->top = NULL;
S->base = NULL;
return OK;
}
void LineEdit(SqStack* S)//行编辑程序
{
SElemType* p, ch, c;
char t = '1';
int i = 1;
InitStack(S);
cout << "输入第" << i << "行:";
ch = getchar();
while (1)
{
while (ch != EOF) //EOF定义为-1
{
switch (ch)
{
case '#':Pop(S, &c); break;
case '@':ClearStack(S); break;
default:Push(S, ch); break;//传入字符
}
t = ch;
ch = getchar();
t = ch;
if (ch != EOF && ch == '\n')
{
break;
}
}
cout << "输出第" << i << "行:";
p = S->base;
while (p != S->top)
{
cout << *p;
++p;
}
cout << endl << endl;
ClearStack(S);
i++;
if (t == '\n')
{
cout << "输入第" << i << "行:";
ch = getchar();
if (ch == '\n')
{
cout << "您输入为空,已结束输入" << endl;
break;
}
}
}
}
int main()//005
{
SqStack sq;
cout << "************** 操作规则 **************" << endl;
cout << "************** 1.输入'#'号为退格操作 **************" << endl;
cout << "************** 2.输入'@'号为退行操作 **************" << endl;
cout << "************** 3.输入'@'号即为空格行 **************" << endl;
cout << "************** 4.输入回车即打印所在行 **************" << endl;
cout << "************** 5.连续输入两次空则退出 **************" << endl;
LineEdit(&sq);//进行括行编辑
DestoryStack(&sq);//将栈销毁
return 0;
}
//运行结果:
小小代码奉上,希望有所帮助。