内存:1000  时间:1

题目描述

题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。
例如输入“I am a student.”,则输出“student. a am I”

输入

输入:

“I am a student.”

输出

输出:

“student. a am I”

样例输入

“You are unbreakable.”

样例输出

“unbreakable. are You”

提示

代码如下

#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;  
}  
    
char push(struct sqstack *p,char a)         /*入栈*/
{  
    *p->top++=a;  
    return 0;  
}  
    
char gettop(struct sqstack *p)             /*取栈顶元素*/
{  
    if(p->base!=p->top)  
        return *(p->top-1);  
    return 0; 
} 
  
char pop(struct sqstack *p)              /*出栈*/
{  
    return *(--p->top);  
}  

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

代码来源于互联网,仅供参考!