行编辑程序C语言实现

例:当用户发现刚刚键入的一个字符是错的时,可补进一个退格符“#”,以表示前一个字符无效;如果发现当前键入的行内差错较多或难以补救,则键入一个退行符“@”,以表示当前行中的字符均无效。

实现代码如下:

#include 
   
   
    
    
#include 
    
    
     
     

#ifndef TRUE
#define TRUE
#endif
#ifndef FALSE
#define FALSE
#endif

typedef char ElemType;
typedef struct Stack{
	ElemType	 data;
	struct Stack *next;
}Stack, *SqLinkStack;
SqLinkStack S;

char ch;

SqLinkStack InitStack()
{
	SqLinkStack Tmp;
	Tmp = (SqLinkStack)malloc(sizeof(Stack));
	if(Tmp == NULL){
		printf("alloc stack failure.\n");
		exit(0);	
	}	
	Tmp->next = NULL;

	S = Tmp;

	return S;
}

void Push(SqLinkStack S, char *e)
{
	SqLinkStack tmp;
	tmp = (Stack *)malloc(sizeof(Stack));
	tmp->data = *e;
	tmp->next = S->next;
	S->next = tmp;
	return;
}

void Pop(SqLinkStack S, char *e)
{
	SqLinkStack r;
	r = S->next;
	if(r == NULL){
		printf("it's empty stack.\n");
		return;	
	}
	*e = r->data;
	S->next = r->next;
	free(r);
}

void ClearStack(SqLinkStack S)
{
	SqLinkStack r;
	while(S->next != NULL){
		r = S->next;
		S->next = r->next;
		free(r);	
	}
	exit(0);

}

SqLinkStack LineEdit(SqLinkStack S)
{
	ch = getchar();
	while(ch != EOF){
		while(ch != EOF && ch != '\n'){
			switch(ch){
					case '#':Pop(S, &ch);     break;	
					case '@':ClearStack(S);  break;	
					default:Push(S, &ch);
			}	
			ch = getchar();
		}	
		return S;
	}
}

void TraverseStack(SqLinkStack S)
{
	char e;
	while(S->next != NULL){
		Pop(S, &e);
		printf("%c ", e);	
	}
}

int
main(void)
{
	S = InitStack();
	S = LineEdit(S);
	TraverseStack(S);
}

    
    
   
   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值