⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 行编辑.cpp

📁 行编辑算法:可将输错的单个字符删除
💻 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 + -