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