我正在做一些算法编程,但我对这个方法的getchar()
非常困惑。
这是所需要的问题:
我尝试使用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;
}
答案 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;
}