【c++】说反话加强版【存疑】

来源:互联网 发布:linux下ant的安装配置 编辑:程序博客网 时间:2024/06/05 18:26

  给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。

输入格式:

  测试输入包含一个测试用例,在一行内给出总长度不超过500 000的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用若干个空格分开。

输出格式:

  每个测试用例的输出占一行,输出倒序后的句子,并且保证单词间只有1个空格。

输入样例:

Hello World   Here I Come

输出样例:

Come I Here World Hello

解决思路:

  1. 建立两个栈a和b,从输入流中读入1个字符,如果不为空格,则将其压入栈a;

  2. 如果读入的字符不为空格

    2.1 则判断栈a是否为空,如果栈a不为空,则将栈a的元素依次全部出栈,然后压入栈b。栈a为空,什么也不做

    2.2 判断栈b是否为空,栈b不为空,则从栈b中出栈一个元素,判断该元素是否为空格,如果该元素为空格,则重新将其压入栈中。如果该元素不为空格,则重新将该元素入栈,同时压入一个空格。
    2.3如果栈b为空,则直接压入一个空格。

  3. 读入下一个字符,重复过程1,2,直到遇到’\n’;

  4. 判断栈a是否为空,不为空,则将a中的元素全部压入b.

  5. 将b中的元素打印输出。

程序代码:

#include<iostream>#include<cstdio>using namespace std;#define MAX 500struct stack{    char data[MAX];    char* top;};void initStack(stack &a);char pushStack(stack &a);void popStack(stack &a, char c);int isStackEmpty(const stack &a);int main(){    stack a ;    stack b;    initStack(a);    initStack(b);    char temp;    char c;    scanf("%c",&c);     while(c!='\n')    {        if(c!=' ')            popStack(a,c);        else        {            while(!isStackEmpty(a))            {                temp = pushStack(a);                popStack(b,temp);                   }            /*if(isStackEmpty(a))                popStack(a,c);*/            if(!isStackEmpty(b))                {                    temp = pushStack(b);                    if(temp==' ')                        popStack(b,temp);                    else                        {                            popStack(b,temp);                               popStack(b,' ');                        }                   }            else                popStack(b,' ');                     }        scanf("%c",&c);         }    while(!isStackEmpty(a))    {        temp =pushStack(a);        popStack(b,temp);       }    while(!isStackEmpty(b))        {            temp =pushStack(b);             cout<<temp;        }    return 0;}void initStack(stack &a){    a.top =a.data;}void popStack(stack &a, char c){    a.top+=1;    *a.top=c;}char pushStack(stack &a){    char temp = *a.top;    a.top-=1;    return temp;}int isStackEmpty(const stack &a){    if(a.top==a.data)        return 1;    else        return 0;       }

这段代码通过了一个测试用例,其他的显示格式错误或者段错误,原因还没找到,存疑。
这里写图片描述

1 0
原创粉丝点击