我需要使用包含数字和字母的方程式来做一些基本的数学操作数。
例如,我有7A + 3A = 20BC
,那么我想得到那个B = 10A/20C = 1A/2C
。
但是,据我所知,C ++不支持用字母进行算术操作数,因此,只要我尝试将字母(字符)放入int或double内存中,编译器就会生气。我在想,也许您可以获取字母ascii号,并以某种方式将该ascii号“连接”到该字母之前或之后的整数,但是自那时以来,我一直无法提供代码示例,嗯,我不知道如何。
我不知道如何进行此操作,因此,如果有人知道如何使用字母进行算术运算(也许为此编写自己的方法或类?),我将非常感谢您的回答。
谢谢!
答案 0 :(得分:2)
您可以为一个项建模:
struct Term
{
double coefficient;
char variable_name;
double exponent;
};
下一步是将表达式解析成术语。
拥有Term
的容器后,您可以随时对其进行操作。
编辑1:
您可能还需要考虑一个Fraction
类。这将使您可以将术语作为分子和分母。
另一种方法是对表达式进行建模:
class Expression
{
Term a;
Term b;
std::string operation;
};
表达式将包含两个Terms
以及它们之间的运算。
还可以考虑使用表达式树来获得正确的优先级。在互联网上搜索“ C ++调车场算法”。
答案 1 :(得分:2)
您需要一些对代数运算的支持,即computer algebra system (CAS)。
维基百科提供了list of such systems。支持代数运算的免费C ++库是GiNaC。例如下面的程序
#include <iostream>
#include <ginac/ginac.h>
using namespace std;
using namespace GiNaC;
int main()
{
symbol a("a"), b("b"), x("x"), y("y");
lst eqns, vars;
eqns = a*x+b*y==3, x-y==b;
vars = x, y;
cout << " solving " << eqns << '\n'
<< " for " << vars << '\n'
<< " gives: " << lsolve(eqns, vars) << endl;
}
产生输出
solving {x*a+y*b==3,x-y==b}
for {x,y}
gives: {x==(a+b)^(-1)*(3+b^2),y==-(-3+a*b)*(a+b)^(-1)}
答案 2 :(得分:1)
您可以使用自定义代数类和运算符重载,
class Algebra {
private:
int value;
char variable;
public:
Algebra(int x, char y) {value = x; variable = y;}
void print() { cout << value << variable << endl; }
friend Algebra operator + (Algebra const &, Algebra const &);
};
Algebra operator + (Algebra const &c1, Algebra const &c2)
{
// Return NULL if c1.variable != c2.variable.
return Algebra(c1.value + c2.value, c1.variable);
}
int main()
{
Algebra c1(10, x), c2(2, x);
Algebra c3 = c1 + c2;
c3.print();
return 0;
}