gpt4 book ai didi

c++ - boolean 计算器如何使用堆栈检查用户输入 C++

转载 作者:太空宇宙 更新时间:2023-11-04 13:26:12 25 4
gpt4 key购买 nike

我正在制作一个计算器,用户可以在其中输入 <,>,<=,>=,&&,||,==,!即 (2>3) 或 (2>3)&&(5<3) 等,并将其计算为真或假。问题是我如何使用 if else 语句来使用诸如“<=,>=”之类的表达式。唯一有效的操作是“<”和“>”。这是检查输入是否匹配操作的函数

  void evalute_stack_tops(std::stack<double>& numbers, std::stack<char>& operations){

double operand1,operand2;


operand2= numbers.top();
numbers.pop();
operand1= numbers.top();
numbers.pop();


if(operations.top()=='<')
{

numbers.push(operand1<operand2);

}
else if (operations.top()=='>')
{

numbers.push(operand1>operand2);


}

else if(operations.top()=='>='){

numbers.push(operand1 >= operand2);
}





}

最佳答案

operationsstack<char>即一堆字符。因此您一次只能访问一个字符。

如何解决?备选方案 1:

您需要扩展您的 if block 检查是否 '>''<'有机会后面跟着一个'='还是不是。

例子:

...
if(operations.top()=='<') {
operations.pop();
if (operations.top()=='=') {
numbers.push(operand1<=operand2);
operations.pop();
}
else numbers.push(operand1<operand2); // and let top of op stack unchanged
}

我不知道你是如何插入运营的。我假设 ">="将以相反的顺序推送,所以首先是 '='然后是 '>' .如果你反过来做,你就必须适应。

如何解决?备选方案 2

或者你可以考虑 make operations一个std::stack<std::string>并推送包含完整运算符(一个或两个字符)的字符串,而不是一个字符一个字符地推送。

这可能会更简单:您只是不应该忘记在if-expression

中用双引号而不是单引号将您的常量括起来

重要提示

请注意,单引号仅包含一个字符。一旦你有多个字符,你应该考虑使用双引号来表明你的意思是一个字符串。并使用 std::string 而不是 char。

关于c++ - boolean 计算器如何使用堆栈检查用户输入 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33290983/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com