补缀到后缀计算器/阅读输入
Infix to postfix calculator/ reading input
我需要使用C++中的堆栈和队列来实现中缀到后缀计算器。我知道该遵循什么算法,但我在启动时遇到了问题。我的程序应该如下所示:
Enter a valid infix expression: 3 + 4 * 5 / 6
The resulting postfi expression is: 3 4 5 * / 6 +
The result is: 6.3333
所以我需要从命令行读取输入,这就是我的问题所在。这是我迄今为止的代码:
using namespace std;
#include <iostream>
#include <stdlib.h>
#include <stack>
#include <queue>
int main() {
stack <string> convert;
stack <string> evaluate;
queue <string> store;
string data;
float num;
cout << "Enter a valid infix expression: ";
while (getline(cin, data)) {
store.push(data);
}
return 0;
}
我的问题是如何停止循环,以及如何从字符串输入中获取数字,以便将它们推入队列以便稍后打印?我的代码将整个字符串推入队列中的第一个插槽。希望有人能帮忙。
感谢
使用我编写的类工具
Tools.h
static class Tools
{
public:
static char* toPostfix(char* source);
static double calculatePostfix(char* source);
static bool contain(char* source,char character);
};
Tools.cpp
#include "Tools.h"
#include <stack>
#include <iostream>
#include <string>
using namespace std;
char* Tools::toPostfix(char* source)
{
stack<char> symbol;
string postfix = "";
int i = 0;
char variables[] = { "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" };
bool find = false;
while (*source != ' ')
{
switch (*source)
{
case '+':
case '-':
case '*':
case '/':
symbol.push(*source);
break;
case ')':
postfix += symbol.top();
symbol.pop();
default:
find = Tools::contain(variables, *source);
if (find)
{
postfix += *source;
find = false;
}
}
source++;
}
// attach other operator in stack(Pop All)
while (!symbol.empty())
{
postfix += symbol.top();
symbol.pop();
}
char* p = new char(postfix.length());
const char* o = postfix.c_str();
for (int i = 0; i < postfix.length(); i++)
p[i] = o[i];
return p;
}
double Tools::calculatePostfix(char* source)
{
char numbers[] = { "0123456789" };
stack<double> number;
for (int i = 0; i < strlen(source); i++)
{
char character = source[i];
if (Tools::contain(numbers, character))
{
number.push(atof(&character));
}
else
{
double number1, number2;
switch (character)
{
case '+':
number2 = number.top();
number.pop();
number1 = number.top();
number.pop();
number.push(number1 + number2);
break;
case '-':
number2 = number.top();
number.pop();
number1 = number.top();
number.pop();
number.push(number1 - number2);
break;
case '*':
number2 = number.top();
number.pop();
number1 = number.top();
number.pop();
number.push(number1 * number2);
break;
case '/':
number2 = number.top();
number.pop();
number1 = number.top();
number.pop();
number.push(number1 / number2);
break;
}
}
}
return number.top();
}
bool Tools::contain(char* source, char character)
{
int size = strlen(source);
for (int i = 0; i < size ; i++)
{
if (source[i] == character)
return true;
}
return false;
}
用法:
std::cout << "postFix : " << Tools::toPostfix("a+(b*c+t)") << std::endl;
std::cout << "Answer : " << Tools::calculatePostfix("24*95+-") << std::endl;
相关文章:
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 2D数组来自文本输入,中间有空格
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 检查输入是否不是整数或数字
- 正在尝试了解输入验证循环
- 读取文件并输入到矢量中
- C++如何通过用户输入删除列表元素
- 用c++从输入文件中读取另一行
- 读取文件的最后一行并输入到链接列表时出错
- 为什么当我输入大量数字时,我的计算器程序开始闪烁和滚动
- 接受多个输入(如 +、- 和平方数字)的计算器.从文本文件中提取信息
- 无限输入C 计算器要结束计算,需要再进行一个INT
- 为什么我的 c++ 计算器每减去我输入的两个数字,而不是执行我要求它执行的操作
- 补缀到后缀计算器/阅读输入
- 需要帮助C++计算器输入单词
- 布尔计算器如何使用堆栈检查用户输入
- 计算器返回0值,不能输入双数
- c++ gpa计算器不接受成绩输入
- 无限制输入的c++计算器
- 抵押计算器验证输入错误