教教我这个弱女子吧
这个程序段书上已经有了一部分,可是我老是不能完全实现,都怪平时零食吃多了
程序要求当输入#时就取消#前的一个字符,当输入@时就取消@前的一行字符相当于一个文本编辑工具了。相信大家对于这个easy的冬冬应该不会有难度,可是帮帮我嘛
#include <stdio.h>
typedef struct
{
char *base;
char *top;
int stacksize;
}sqstack;
main()
{
void lineedit();
char ch;
printf("\n**************************************************************");
printf("\nThis is a program of editing note producing by Yingying^_^.");
printf("\nPress '#' to backspace,");
printf("\nPress '@' to backline.");
printf("\nPress '$' to end.");
lineedit();
}
void lineedit()
{ sqstack s;
char ch,c;
initstack(sqstack s);
ch=getchar();
while(ch!='$')
{
while(ch!='$'&&ch!='\n')
{
switch(ch)
{
case '#':pop(s,c);
case '@':clearstack(s);
default: push(s,ch);
}
ch=getchar();
}
clearstack(s);
if(ch!='$')
ch=getchar();
}
destroystack();
}
int initstack(sqstack s)
{
s.base=(char *)malloc(100*sizeof(char));
if(!s.base) exit(-1);
s.top=s.base;
s.stacksize=100;
return(1);
}
int pop(sqstack s,char e)
{
if(s.top==s.base)
return(0);
e=*--s.top;
return(1);
}
int push(sqstack s,char e)
{
if(s.top-s.base>=s.stacksize)
{
s.base=(char *)realloc(s.base,s.stacksize+10)*sizeof(char));
if(!s.base) exit(-1);
s.top=s.base+s.stacksize;
s.stacksize+=10;
}
*s.top++=e;
return(1);
}
clearstack(sqstack s)
{
while(s.top!=s.base)
pop(s,char m);
}