C++ 如何用c++;?

C++ 如何用c++;?,c++,math,C++,Math,我需要用包含数字和字母的方程式做一些基本的数学运算 例如,我有7A+3A=20BC,然后我想得到B=10A/20C=1A/2C 但是,据我所知,C++中不支持用字母来计算算术运算数,所以当我试图把字母(字符)放在int或双内存中时,编译器就会生气。我在想,也许你可以得到字母ascii数字,并以某种方式将该ascii数字“连接”到该字母之前或之后的整数,但我一直无法想出一个这样的代码示例,因为我不知道如何 我不知道如何处理这个问题,所以如果有人知道我如何用字母来应用算术(也许写我自己的方法或类?)

我需要用包含数字和字母的方程式做一些基本的数学运算

例如,我有
7A+3A=20BC
,然后我想得到
B=10A/20C=1A/2C

但是,据我所知,C++中不支持用字母来计算算术运算数,所以当我试图把字母(字符)放在int或双内存中时,编译器就会生气。我在想,也许你可以得到字母ascii数字,并以某种方式将该ascii数字“连接”到该字母之前或之后的整数,但我一直无法想出一个这样的代码示例,因为我不知道如何

我不知道如何处理这个问题,所以如果有人知道我如何用字母来应用算术(也许写我自己的方法或类?)

谢谢

您可以为术语建模:

下一步是将表达式解析为术语。
一旦你有了一个
Term
s的容器,你就可以随心所欲地操作它们了

编辑1:
你也可以考虑一个<代码>分数类。这将允许您拥有作为分子和分母的术语

另一种方法是对表达式建模:

表达式将包含两个
术语以及它们之间的运算。

还可以考虑表达式树来获得优先级的正确性。在internet上搜索“C++调车场算法”。

您需要对代数运算的一些支持,即a

维基百科提供了一个。支持代数操作的自由C++库是。例如,下面的程序

#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;
}

可以使用自定义代数类和运算符重载

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; 
}
类代数{
私人:
int值;
字符变量;
公众:
代数(intx,chary){value=x;variable=y;}

作废打印(){我想说,用符号逻辑编写一个程序来解决方程不是很简单,你需要重新实现C++中的数学或是一种数学。这是一项非常艰巨的任务,尤其是如果你是初学者。换言之,你可能想研究上下文无关的语法和语法。然而,你所做的事情还是比较复杂的。不仅仅是语法。不要试图写一个程序来解决任意的代数问题。解决你特定的代数问题,然后在需要的时候写一个程序,在代数中运行数字to@Jacob方程式通常由计算机使用各种算法求解,而不是像在学校那样通过代数学例如,一个线性方程组将在计算机上使用矩阵和高斯-乔丹消去法求解,而不是像代数课程中的人类那样通过移动符号来求解。当然,你可以编写一个程序来模拟符号操作,但你正在进入研究生阶段,可能是博士阶段。
#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)}
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; 
}