问题 B: DS堆栈--行编辑
时间限制: 1 Sec 内存限制: 128 MB
提交: 430 解决: 352
[提交][状态][讨论版]
题目描述
使用C++的STL堆栈对象,编写程序实现行编辑功能。行编辑功能是:当输入#字符,则执行退格操作;如果无字符可退就不操作,不会报错
本程序默认不会显示#字符,所以连续输入多个#表示连续执行多次退格操作
每输入一行字符打回车则表示字符串结束
注意:必须使用堆栈实现,而且结果必须是正序输出
输入
第一行输入一个整数t,表示有t行字符串要输入
第二行起输入一行字符串,共输入t行
输出
每行输出最终处理后的结果,如果一行输入的字符串经过处理后没有字符输出,则直接输出NULL
样例输入
4
chinaa#
sb#zb#u
##shen###zhen###
chi##a#####
样例输出
china
szu
sz
NULL
代码块:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct SqStack
{
char *base;
char *top;
int stacksize;
} SqStack;
void InitStack(SqStack *S)
{
S->base = (char *)malloc(100*sizeof(char));
S->top = S->base;
S->stacksize = 100;
}
void PushStack(SqStack *S, char e)
{
*S->top = e;
S->top++;
}
int PopStack(SqStack *S)
{
if(S->top==S->base)
return -1;
S->top--;
return 0;
}
char GetTop(SqStack S)
{
if(S.top==S.base)
return -1;
char e;
e = *(S.top-1);
return e;
}
int main(void)
{
int i, j, t;
scanf("%d", &t);
getchar();
for(i=0; i<t; i++)
{
SqStack S;
InitStack(&S);
char a[100] = {0};
scanf("%s", a);
getchar();
for(j=0; j<strlen(a); j++)
{
if('#'!=a[j])
PushStack(&S, a[j]);
else if('#'==a[j] && S.base!=S.top)
PopStack(&S);
}
if(S.base==S.top)
printf("NULL");
else
{
int k = 0;
char b[100] = {0};
while(S.top!=S.base)
{
b[k] = GetTop(S);
PopStack(&S);
k++;
}
for(j=strlen(b)-1; j>=0; j--)
printf("%c", b[j]);
}
if(i!=t-1)
printf("\n");
}
return 0;
}