您好我正在尝试保存未知数量的char和int输入,然后将它们填充到一个名为push的函数,但我意识到我正在使用的方法将更改int的输入。因此,我想问一下这是否还有其他方法?感谢和抱歉,因为我刚刚开始使用c ++而问到了noob qn。
char input;
int inNum;
Stack st;
cout << "Enter an expression: " << endl;
while(cin >> input)
{
if (input != '+' && input != '-'
&& input != '/' && input != '*'
&& input != '=')
{
inNum = input - '0';
cout << inNum << endl;
st.push(inNum);
}
}
答案 0 :(得分:0)
我相信您可以利用isdigit
中的<cctype>
和istream
的{{1}}功能来完成您的解析技术。
putback
您还可以使用char c;
int i;
while(cin >> c) {
if(isdigit(c)) {
cin.putback(c);
cin >> i; //read my integer
}
else {
//handle operator
}
}
功能在阅读前查看下一个字符。如果它是一个数字,那么就像正常一样解析。使用此功能时,请手动忽略空格。
答案 1 :(得分:0)
如果不了解输入信息很难说,但如果你的输入只包含数字和操作(+, - ,*,/,=),那么你可以做的修改量最少类似的东西:
string numBuffer;
while(cin >> input)
{
if (input != '+' && input != '-'
&& input != '/' && input != '*'
&& input != '=')
{
temp += input;
} else {
st.push(atoi(numBuffer.c_str()));
numBuffer = "";
}
}
当您正在阅读这些字符时,只要您还没有阅读某项操作,您就会建立一个数字字符串,并且只有当您阅读了某个操作时你知道你有一个完整的号码吗?
答案 2 :(得分:0)
如果您阅读了一个数字,只需将其连接到前一个数字 - 如果之前有一个数字 - 另一个明智的存储它。这样,如果你有13+1
,它会先找到1
,然后是3
,但前面找到的是一个数字,所以它变成13
。然后你找到+
,所以你将13
存储在某处(在矢量中)。等