📄 行编辑.cpp
字号:
#include"stdio.h"
#include"malloc.h"
#define SIZE 20
typedef struct{
char *base;
char *top;
int stacksize;
}stack;
InitStack(stack &s) // 建栈函数,实现建立栈的功能
{
s.base=(char *)malloc(SIZE*sizeof(char)); // 分配栈空间
if(!s.base) printf("OVERFLOW"); // 若栈底指针为空,输出"OVERFLOW"
s.top=s.base; // 给栈顶指针赋值,其值即为栈底指针的值
s.stacksize=SIZE; // 栈的空间大小
return 1;
}
void Push(stack &s,char e) // 进栈函数,实现将字符压入栈的功能
{
if(s.top-s.base>=s.stacksize) // 栈满条件判定
{
s.base=(char *)realloc(s.base,(s.stacksize+SIZE)*sizeof(char)); //若栈满,分配新空间
if(!s.base) printf("OVERFLOW");
s.top=s.base+s.stacksize; // 指定分配新空间后栈顶指针的值
s.stacksize+=SIZE; // 分配新空间后栈的大小
}
*s.top++=e; // 将字符赋给栈顶元素
}
void Pop(stack &s) // 出栈函数,实现删除栈顶元素的功能
{
if(s.top==s.base) printf("There are no letters to output."); // 若栈为空,没有要删除的元素
--s.top; // 删除栈顶元素
}
void ClearStack(stack &s) // 清空栈函数,实现将栈清空的功能
{
s.top=s.base;
}
void DestroyStack(stack &s) // 销毁栈函数,实现将栈销毁的功能
{
free(s.base);
}
void LineEdit(stack &s) // 行编辑函数
{
char *r;
char ch;
printf("Please input letters in line:\n");
ch=getchar(); // 输入字符
while(ch!='*')
{
while(ch!='*'&&ch!='\n')
{
switch(ch)
{
case'#': Pop(s); break; // 若输入字符为'#',则将栈顶元素删除
case'@': ClearStack(s); break; // 若输入字符为'@',则将栈清空
default: Push(s,ch); break; // 若输入的是有效字符,则将其压入栈中
}
ch=getchar();
}
printf("What you input is:\n");
for(r=s.base;r!=s.top;r++) // 将输出有效字符按输入顺序输出
putchar(*r);
printf("\n");
ClearStack(s); // 清空栈
if(ch!='*') // 若输入字符不为全文结束符'*',则继续输入
{
printf("Please input new letters:\n");
ch=getchar();
}
}
DestroyStack(s); // 若输入字符为全文结束符'*',则编辑结束,并销毁栈
}
void main()
{
stack s; // 定义结构体变量
InitStack(s); // 调用建栈函数,建立栈
LineEdit(s); // 调用行编辑函数,实现编辑功能
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -