我从用户那里得到方程(例如:1X1 + 2X2 = 24) 无论变量的数量是多少,我都要将它换成1X1,2X2 +, - 或= 然后把它们放在char数组中,每个用x或X分叉,然后把它放在另一个数组上,但是有些垃圾来了
#include<iostream>
#include <stdio.h>
#include <string.h>
#include<string>
#include <algorithm>
#include<vector>
using namespace std;
int main()
{
string a;
cout<<"Enter Equation: "<<endl;
cin>>a; //string of the equation
int num= a.size();
char str[num]; //view it as array of char
for (int k=0;k<num;k++)
{
str[k]=a[k];
cout<<str[k];
}
int i=0;
char *pch;
int count = 0;
for (int i = 0; i < a.size(); i++)
{
//counting + , - and = to see how many element i need in array
if (a[i] == '+'||a[i] == '-'||a[i] == '=')
count++;
}
char *array[count];
cout<<"\nSplitting string into tokens: "<<a;
pch = strtok (str,"= + -");
while (pch != NULL)
{
array[i++]=pch;
pch = strtok (NULL, "= + -");
}
// printing every variable
for(i=0;i<count+1;i++)
{
cout<<endl<<array[i];
}
char *pch_var;
char *array_var[2];
for(int j=0; j<count+1;j++)
{
cout<<"\nSplitting Variable into tokens: "<<array[j];
pch_var = strtok (array[j],"x X");
while (pch_var != NULL)
{
array_var[i++]=pch_var;
pch_var = strtok (NULL, "x X");
}
cout<<array_var[0]<<endl<<array_var[1];
}
return 0;
}
出局就像那样
输入公式:
1X1 + 2X2 = 24 //来自用户
1X1 + 2X2 = 24 //这里启动我的代码功能
将字符串拆分为标记:1X1 + 2X2 = 24
1X1
2X2
24 {{吨k║
将变量拆分为令牌:1X1P■m
]├ïUï∞â∞SVWh
将变量拆分为令牌:2X2P■m
]├ïUï∞â∞SVWh
答案 0 :(得分:0)
如果我理解正确,您希望用户输入等式。然后你想解析这个等式并给出答案。如果是这种情况,通常的方法是将公式从中缀更改为前缀或后缀并将其放入堆栈中。然后处理每个堆栈条目并进行计算。
假设您有输入1 + 2
(这是中缀形式),请将其更改为1 2 +
,这是后缀形式。
对于您的示例1X1+2X2+3X2+3x1=24
,后缀变为1 1 x 2 2 x + 3 2 x + 3 1 x + 24 =
。从左开始,弹出堆栈直到第一个操作数,计算结果并推回,直到完全处理堆栈。
step 1) 1 1 x 2 2 x + 3 2 x + 3 1 x + 24 =
step 2) 1 4 + 3 2 x + 3 1 x + 24 =
step 3) 5 3 2 x + 3 1 x + 24 =
step 4) 5 6 + 3 1 x + 24 =
step 5) 11 3 1 x + 24 =
step 6) 11 3 + 24 =
step 7) 14 24 =
step 8) false
我认为将表达式设为前缀更容易实现,但更难理解。这是一些链接
http://scanftree.com/Data_Structure/prefix-postfix-infix-online-converter
http://interactivepython.org/runestone/static/pythonds/BasicDS/InfixPrefixandPostfixExpressions.html
我希望这会有所帮助。