采用c++stl实现,本题难点不多,思路也不怎么复杂。鄙人一开始写的时候就是出于使用栈来实现并且不自己构建栈,在网上搜索了一大圈没有找到用容器写的,大多数都是手动建栈。所以自己斗胆采用c++的STL容器里面栈来实现。漏洞很多最令我头痛的是输出数据时必须倒序输出我用for循环输出实现不了,尝试了很多遍,在函数里我给他注释了起来,自己用while循环输出的数据
题目
一个简单的行编辑程序的功能是:接受用户从终端输人的程序或数据,并存人用户的数据区。由于用户在终端上进行输人时,不能保证不出差错,因此,若在编辑程序中,“每接受一个字符即存入用户数据区”的做法显然不是最恰当的。较好的做法是,设立一个输人缓冲区,用以接受用户输人的一行字符,然后逐行存人用户数据区。允许用户输人出差错,并在发现有误时可以及时更正。例如,当用户发现刚刚键人的一个字符是错的时,可补进一个退格符“#”,以表示前一个字符无效;如果发现当前键人的行内差错较多或难以补救,则可以键入一个退行符“@”,以表示当前行中的字符均无效。例如,假设从终端接
下面是测试输入数据。
whli##ilr#e(s#*s)
outcha@putchar(*s=#++)
正确输出
while(*s)
putchar(*s++)
源代码如下:
#include<cstdio>
#include<string>
#include<string.h>
#include<stack> //c++STL栈的头文件
#include<iostream>
#include<stdlib.h>
using namespace std;
stack<char> s;//定义一个字符型的栈
void LineEdit(string str)
{
int count=0,len;
char v[100];
for(int i=0;i<str.length();i++)
{
char b;
char a=str[i];
//s.push(a);
if(!s.empty()&&(a=='#'||a=='@')){
if(a=='@'){
while(!s.empty()){
s.pop();
}
}
else s.pop();
}
else {
s.push(a);
}
}
while(!s.empty()){
v[count++]=s.top();
s.pop();
}
len=strlen(v);
while(len){
printf("%c",v[len]);
len--;
}
printf("%c\n",v[0]);
/*
for(;len<=0;len--)
{
printf("%c",v[len]);
}
*/
}
int main(){
int count=0,len=0,k=0;
char v[100];
string str1,str2;
cin>>str1;
cin>>str2;
LineEdit(str1);
LineEdit(str2);
return 0;
}