数据结构 8587 行编辑程序 (C++)
数据结构 8587 行编辑程序
·
为了方便期末方便上机考试,特地将答案简化为使用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;
}

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