SDUT1479数据结构实验之栈:行编辑器

时间:2023-03-09 01:22:12
SDUT1479数据结构实验之栈:行编辑器

先是普通的数组做法

 #include<stdio.h>
#include<string.h>
int main()
{
char ch[] ;
while(~scanf("%s",ch))
{
char sh[] ;
int top = - ;//底下用于判断数组里是否是空
int len = strlen(ch) ;
for(int i = ; i <= len- ; i++)
{
if(ch[i]!='#'&&ch[i]!='@')
sh[++top] = ch[i] ;
else if(ch[i] == '#'&&top != -)//判断#前边是否是无字符情况
{
sh[top--] ;
}
else if(ch[i] == '@')
{
while(top != -)
top-- ;//把存入数组里的字符全部清掉
}
}
for(int k = ; k<=top ; k++)
printf("%c",sh[k]) ;
printf("\n") ;
}
return ;
}

这个是用的C++里的stack函数进行反复的出栈进栈操作

 #include<cstdio>
#include<cstring>
#include<stack>
#include<algorithm>
using namespace std;
int main()
{
stack<char>q;
char s[],s1[];
while(scanf("%s",s)!=EOF)
{
int len=strlen(s);
for(int i=; i<len; i++)
{
if(s[i]!='#'&&s[i]!='@')
{
q.push(s[i]);
}
else if(s[i]=='#'&&!q.empty())
q.pop();
else if(s[i]=='@')
{
while(!q.empty())
{
q.pop();
}
}
}
int j=;
while(!q.empty())
{
s1[j++]=q.top();
q.pop();
}
s1[j]='\0';
for(int i=j-; i>=; i--)
printf("%c",s1[i]);
printf("\n");
}
return ;
}