C语言 行编辑程序

输入一行字符串,用户在输入错误时可以用#和@进行修正,其中#为退格符,@为退行符。要求输出修正后的字符串。要求用栈作为存储结构实现
没有结束符 给个例子 输入: whli##ilr#e(s#*s)
outcha@putchar(*s=#++)
输出:while(*s)
putchar(*s++)

第1个回答  2008-12-03
/*TC2编译通过*/
/*以回车符为结束符输入一行*/
#include <stdio.h>
#define MAXSIZE 128

int main()
{
char base[MAXSIZE];
char *stack,*p;
char c;
stack=base;
while((c=getchar())!='\n')
{
if(c=='@') stack=base;
else if(c=='#'){if(stack!=base) stack--;}
else *(++stack)=c;
}
if(stack==base) printf("√");/*没有可输出的字符*/
p=base;
while(p!=stack) printf("%c",*(++p));
getch();
}本回答被提问者采纳
第2个回答  2012-04-16
他答案错的~程序如下:
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define OVERFLOW 0
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define OK 1
#define ERROR 0
typedef struct{
int *base;
int *top;
int stacksize;
}SqStack;
typedef int status;
void main()
{status InitStack(SqStack &s);
void ClearStack(SqStack &s);
void DestroyStack(SqStack &s);
status Push(SqStack &s,int x);
status Pop(SqStack &s,int &e);
SqStack s;
InitStack(s);
int e;
char ch=getchar();
while(ch!=EOF)
{ while(ch!=EOF&&ch!='\n')
{
switch(ch)
{
case'#':Pop(s,e);break;
case'@':ClearStack(s);break;
default:Push(s,ch);break;
}
ch=getchar();
}
ClearStack(s);
if(ch!=EOF) ch=getchar();
}
DestroyStack(s);
}
status InitStack(SqStack &s)
{
s.base=(int *)malloc(STACK_INIT_SIZE*sizeof(int));
if(!s.base)exit(OVERFLOW);
s.top=s.base;
s.stacksize=STACK_INIT_SIZE;
return OK;
}
void ClearStack(SqStack &s)
{
s.top=s.base;
}
void DestroyStack(SqStack &s)
{
s.base=NULL;
}
status Push(SqStack &s,int x)
{
if(s.top-s.base>=s.stacksize)
{
s.base=(int *)realloc(s.base,(s.stacksize+STACKINCREMENT)*sizeof(int));
if(!s.base)exit(OVERFLOW);
s.top=s.base+s.stacksize;
s.stacksize+=STACKINCREMENT;
}
*s.top++=x;
return OK;
}
status Pop(SqStack &s,int &e)
{
if(s.top==s.base)return ERROR;
e=*--s.top;
return OK;
}
相似回答