我有一些问题,反向的话

时间:2016-05-13 10:00:15

标签: c++

我正在做一些算法编程,但我对这个方法的getchar()非常困惑。 这是所需要的问题:

  • 输入:Hello World Here I Come
  • 输出:来吧,我来世界你好

我尝试使用getchar()来获取每个char,并使用字符串变量来收集char。 当空间到来时,我使用stack将当前字符串变量推入堆栈,使字符串变量等于“”。但无论我尝试什么,输出总是输出乱码,我不知道如何。

以下是代码:

#include<iostream>
#include<stack>

using namespace std;

stack<string> re;// the stack

int main()
{

 char a;// the char to get very single char that print 
 string temp=""; 
 string all="";

while(a=getchar()!='\n')//if enter don't come
{
    if(a==(char)'32')//if the space come,push temp and reset the temp equals ""
    {
        re.push(temp);
        temp="";//so that i can collect a new word without last one
    }
    else
        temp+=a;//temp collects the char

}

while(!re.empty())//get every string from the stack
{
    if(re.size()==1)
    cout<<re.top();
    else
    cout<<re.top()<<" ";

    re.pop();   
}

return 0;
}

1 个答案:

答案 0 :(得分:1)

a = getchar() != '\n'

a将为0或1,具体取决于收到的字符是否为'\n'。它可以改为例如:

a = getchar(), a != '\n'

另一种可能性是:

(a = getchar()) != '\n'

你也没有把最后一个字推到堆叠。完全没有使用字符串all,因此我删除了它。

如果a为空格,则问题评论中指出的另一个问题是无效比较:(char)'32'不是空格字符,' '是。

更正后的代码(与问题相同的身份):

#include<iostream>
#include<stack>

using namespace std;

stack<string> re;// the stack

int main()
{
    char a;// the char to get very single char that print
    string temp = "";

    while ((a = getchar()) != '\n')//if enter don't come
    {
        if (a == ' ')//if the space come,push temp and reset the temp equals ""
        {
            re.push(temp);
            temp = "";//so that i can collect a new word without last one
        }
        else
            temp += a;//temp collects the char
    }
    if (!temp.empty())//if last word is not empty then push it to the stack
    {
        re.push(temp);
    }

    while (!re.empty())//get every string from the stack
    {
        if (re.size() == 1)
            cout << re.top();
        else
            cout << re.top() << " ";

        re.pop();
    }

    return 0;
}