3.2.3--行编辑程序

行编辑程序

一个简单的行编辑程序的功能是:接受用户从终端输入的程序或数据,并存入用户的数据区。由于用户在终端上输入时,不能保证不出差错,因此,若在编辑行中,“每接受一个字符,即存入用户数据区”的做法显然是不恰当的。较好的做法是,设立一个输入缓冲区,用于接受用户输入的一行字符,然后逐行存入用户数据区。允许用户输入出差错,并在发现有误时,及时更正。例如,当用户发现刚刚键入的一个字符是错误的时候,可以补进一个退格符“#”,以表示前一个字符无效;如果发现当前键入的行内差错较多的话,则可以键入一个退格符“@”,以表示当前行中的字符均无效。

getchar()

getchar()的功能是什么?
getchar()函数的作用是从计算机终端(一般为键盘)获取一个无符号字符。getchar()函数只能接收一个字符,其函数值就是从输入设备获取到的字符。

代码:

#include<iostream>//ZJJ数据据结构-栈3.2.3
using namespace std;
#define MAXSIZE 100
typedef struct SeqStack {
	char data[MAXSIZE];
	int top; //数值下标
}SeqStack;
void InitSeqstack(SeqStack* s)/*初始化栈,把栈初始化为空,把栈顶指针置为-1*/
{
	s->top = -1;
}
int StackEmpty(SeqStack* s)/*判空操作,当栈顶指针为top 为-1,栈为空*/
{
	if (s->top == -1)
	{
		cout << "栈为空" << endl;
		return 1;
	}
	return 0;
}
void Push(SeqStack* s, char e)/*入栈操作,栈顶指针top++,然后将data值压入栈中*/
{
	if (s->top >= MAXSIZE)
	{
		cout << "栈已满,不能入栈" << endl;

	}
	s->top++;
	s->data[s->top] = e;

}
void pop(SeqStack* s)/*出栈操作,将栈顶指针top-- */
{
	if (s->top == -1)
	{
		cout << "栈为空,无法出栈" << endl;

	}

	s->top--;
}
void Clear(SeqStack* s)/*清空栈,清空栈与初始化栈的操作一样,只需将栈顶指针置-1即可*/
{
	s->top = -1;
}
void Print(SeqStack* s)
{
	for (int i =0;i<=s->top;i++)
		cout << s->data[i];
	cout << endl;
}
void LineEdit(SeqStack* s)
{
	char a=getchar();
	while (a != '\n')
	{
		switch (a)
		{
			case'#':
				pop(s);
				break;
			case'@':
				Clear(s);
				break;
			default:
				Push(s, a);
				break;
		}
		a = getchar();
	}
}

int main()
{
	SeqStack s;
	InitSeqstack(&s);
	LineEdit(&s);
	Print(&s);
	system("pause");
}

代码运行:
请添加图片描述
有无欠缺的,欢迎指正。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZJJ啥都学不会

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值