#include <stdio.h>
#include <stdlib.h>
#define STACK_INIT_SIZE 100
typedef struct{
int *base;
int *top;
int stacksize;
}SqStack;
int IsEmpty(SqStack *S)
{
return S->top==S->base;
}
void InitStack(SqStack *S){
S->base=(int *)malloc(STACK_INIT_SIZE *sizeof(int));
if(!S->base) exit(1);
S->top=S->base;
S->stacksize=STACK_INIT_SIZE;
}
int IsFull(SqStack *S)
{
return S->top-S->base==STACK_INIT_SIZE-1;
}
void Push(SqStack *S,int e){
if (IsFull(S))
{
printf("栈上溢");
//exit(1);
}
*S->top++ =e;
}
int Pop(SqStack *S){
if(IsEmpty(S))
{
printf("栈为空");
//exit(1);
}
return *--S->top;
}
int Top(SqStack *S)
{
if(IsEmpty(S))
{
printf("栈为空");
//exit(1);
}
return *(S->top-1);
}
void ClearStack(SqStack *S){
S->top=S->base; //S->base=S->top;底不动
}
int StackLength(SqStack S){
int i;
for(i=0;S.base<S.top;--S.top)i++;
return i;
}
void LineEdit(SqStack *S){
int a[100],n,i;
char ch;
ch=getchar();
while(ch!='\n')
{
//i++;非输入字符参与计数 自己编写求栈长度函数!!
switch(ch)
{
case '#':Pop(S);break;//删除输入的一个元素
case '@':ClearStack(S);break;//不能够丢!! 删除前面的所有元素
default:Push(S,ch);break;
}
ch= getchar();
}
i=StackLength(*S); //printf("%d\n",i);测试
for(n=1;n<=i;n++)
{
a[n]=Pop(S); //Top(S);多余
}
for(n=i;n>=1;n--)
printf("%c",a[n]);
}
int main(int argc, char *argv[])
{ SqStack *ST;
ST=(SqStack *)malloc(100*sizeof(SqStack)); //指针必须分配空间!!
printf("please input:\n");
InitStack(ST);
LineEdit(ST);
system("PAUSE");
return 0;
}
该博客介绍了一个使用C语言编写的简单文本编辑器。编辑器支持基本操作,如字符输入、删除和清除。它利用栈的数据结构来处理用户输入,并在遇到特定字符(如'#'和'@')时执行相应的操作。该编辑器能够处理溢出和空栈的情况,并能输出输入字符的逆序顺序。
3708

被折叠的 条评论
为什么被折叠?



