为了方便期末方便上机考试,特地将答案简化为使用STL函数,使用vector容器充当栈结构。

其中vector的操作模板如下:

vector<typdef>name;构建vector

vector.push_back();顶部元素出栈

vector.pop_back();元素从顶部推入容器

vector.clear();清空容器内所有元素

vector.size();容器内元素大小

vector.empty();判断容器是否为空

Description:

利用栈编写简单的行编辑程序:接受用户从终端输入的程序或数据,在输入过程中,允许用户输入出差错,并在发现有误时可以及时更正。例如:当用户发现刚刚键入的一个字符是错的时,可以补进一个退格符“#”,以表示前一个字符无效;如果发现当前键入的行内差错较多或难以补救,则可以键入一个退行符“@”,以表示当前行中的字符均无效。例如:假设从终端接受了这样两行字符: whli##ilr#e (s#*s) outcha@putchar(*s=#++); 则实际有效的是下列两行: while (*s) putchar(*s++); 本题目给出部分函数,要求将行编辑函数补充完整,并完成整个程序。

输入格式

第一行:第一个字符为输入文本的行数n;
第二行至第n行:每行均为一串字符,其间可以含有“#”和“@”符号,以回车键结束本行的输入;


 

输出格式

输出第一至第n行的内容如下:
第一行:第一行从终端输入的有效字符。
第二行:第二行从终端输入的有效字符。
…… ……
第n行:第n行从终端输入的有效字符。


 

输入样例

2
defne##ine OK 1
typp cila@type int element


 

输出样例

define OK 1
type int element
#include<string>//行编辑程序
#include<stack>
#include<iostream>
#include<queue>
#include<vector>
using namespace std;

const int N = 10005;

int main()
{
	char ch;
	int n;
	//std::ios::sync_with_stdio(false);//这里千万不能用这个,会超时
	cin >> n;
	ch = getchar();//读入第一个字符
	for (int i = 1; i <= n; i++)
	{
		vector<char>s;//使用vecotor模板,可当作栈
		ch = getchar();
		while (ch != '\n')
		{
			switch (ch)
			{
			case '#':
				if (!s.empty())
				{
					s.pop_back();
				}
				break; //末尾字符退栈
			case '@':
				s.clear();
     			break; //清空栈
			default:
				s.push_back(ch); //有效字符进栈
			}
			ch = getchar(); //接收下一个字符
		}
		for (int i = 0; i < s.size(); i++)//输出
		{
			cout << s[i];
		}
		cout << endl;
	}
	return 0;
}

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐