在字符串中删除特定的字符(栈和队列)

在字符串中删除特定的字符(栈和队列)

时间: 1ms        内存:1000M

描述:

题目:输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。
例如,输入”They are students.””aeiou”
则删除之后的第一个字符串变成”Thy r stdnts.”

输入:

输入:

They are students.

aeiou

输出:

输出:

Thy r stdnts.

示例输入:

They are students.
aeiou

示例输出:

Thy r stdnts.

提示:

参考答案(内存最优[752]):

#include<stdio.h>   
#include<malloc.h> 
#include<string.h> 
#define SEN 100   
      
struct sqstack   
{   
    char *base;   
    char *top;   
    int size;   
};   
      
struct sqstack *initEmptyStack()   /*构建空輚*/
{   
    struct sqstack *p;   
    p=(struct sqstack *)malloc(sizeof(struct sqstack));   
    if(p!=NULL)   
    {   
        p->base=(char *)malloc(sizeof(struct sqstack)*SEN);   
        if(p->base!=NULL)   
        {   
            p->top=p->base;   
            p->size=SEN;   
            return p;   
        }   
    }   
    else
        free(p);   
    return NULL;   
}   
      
int push(struct sqstack *p,char a)         /*入栈*/
{   
    *p->top++=a;   
    return 0;   
}   
      
int gettop(struct sqstack *p)             /*取栈顶元素*/
{  
    if(p->base!=p->top)  
        return *(p->top-1);  
    return 0; 
} 


int pop(struct sqstack *p)              /*出栈*/
{   
    return *(--p->top);   
}   
      
int main()   
{    
    struct sqstack *p,*p1; 
    char c;
    p=initEmptyStack();
	p1=initEmptyStack();
	while(scanf("%c",&c)&&c!='\n')
		push(p,c);
	while(scanf("%c",&c)!=EOF)
	{
		while(p->base!=p->top)
		{
			if(gettop(p)!=c)
				push(p1,pop(p));
			else {pop(p);}
		}
		while(p1->base!=p1->top)
			push(p,pop(p1));
	}
	while(p->base!=p->top)
		push(p1,pop(p));
	while(p1->base!=p1->top)
		printf("%c",pop(p1));
	printf("\n");
    return 0;   
}

参考答案(时间最优[0]):

#include<stdio.h>   
#include<malloc.h> 
#include<string.h> 
#define SEN 100   
      
struct sqstack   
{   
    char *base;   
    char *top;   
    int size;   
};   
      
struct sqstack *initEmptyStack()   /*构建空輚*/
{   
    struct sqstack *p;   
    p=(struct sqstack *)malloc(sizeof(struct sqstack));   
    if(p!=NULL)   
    {   
        p->base=(char *)malloc(sizeof(struct sqstack)*SEN);   
        if(p->base!=NULL)   
        {   
            p->top=p->base;   
            p->size=SEN;   
            return p;   
        }   
    }   
    else
        free(p);   
    return NULL;   
}   
      
int push(struct sqstack *p,char a)         /*入栈*/
{   
    *p->top++=a;   
    return 0;   
}   
      
int gettop(struct sqstack *p)             /*取栈顶元素*/
{  
    if(p->base!=p->top)  
        return *(p->top-1);  
    return 0; 
} 


int pop(struct sqstack *p)              /*出栈*/
{   
    return *(--p->top);   
}   
      
int main()   
{    
    struct sqstack *p,*p1; 
    char c;
    p=initEmptyStack();
	p1=initEmptyStack();
	while(scanf("%c",&c)&&c!='\n')
		push(p,c);
	while(scanf("%c",&c)!=EOF)
	{
		while(p->base!=p->top)
		{
			if(gettop(p)!=c)
				push(p1,pop(p));
			else {pop(p);}
		}
		while(p1->base!=p1->top)
			push(p,pop(p1));
	}
	while(p->base!=p->top)
		push(p1,pop(p));
	while(p1->base!=p1->top)
		printf("%c",pop(p1));
	printf("\n");
    return 0;   
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注