Advertisement

C++中表达式求值的实现,以及封装类的编写,同时提供计算器的源代码。

  • 5星
  •     浏览量: 0
  •     大小:None
  •      文件类型:None


简介:
该表达式计算封装类能够处理三角函数、反三角函数以及各种常规公式的数值计算。代码结构便于调整和修改,非常适合进行功能的扩展。该系统还支持对参数进行重新赋值,从而实现灵活的计算。以下是一个示例代码片段: ```c++ #include Express.h #include ExpValue.h #include VarValue.h void main() { // 表达式 string strExpress = sin(A)*(3+B)-4/cos(C)*PI; CMapVariabile m_VarsMap; CExpression m_expression; m_VarsMap.InitHashTable(100); m_expression.AtachVariables(&m_VarsMap); // 参数赋值 CNumericValue *value = 0; value = new CNumericValue; value->SetValue(12.22); m_VarsMap[_T(A)] = value; value = new CNumericValue; value->SetValue(13.44); m_VarsMap[_T(B)] = value; value = new CNumericValue; value->SetValue(567.987); m_VarsMap[_T(C)] = value; value = new CNumericValue; value->SetValue(3.1415926); m_VarsMap[_T(PI)] = value; double dValue = 0; int result = m_expression.ChangeExpression(strExpress.c_str()); if (result < 0) { long result = m_expression.Value(dValue); if (result == DIVISION_BY_0) { printf(亲,除零了.....-_-!\r\n); } else { printf(%s=%.2f\r\n, strExpress.c_str(), dValue); } } // 清除变量 POSITION pos = m_VarsMap.GetStartPosition(); while (pos != NULL) { CString sName; CValue *pVal; m_VarsMap.GetNextAssoc (pos, sName, pVal); delete pVal; } m_VarsMap.RemoveAll(); } ```

全部评论 (0)

还没有任何评论哟~
客服
客服
  • 外国人C++
    优质
    这段内容由外国开发者编写,提供了一个用于解析和计算C++表达式的类库及一个简单的命令行计算器程序,包含完整的源代码。 老外写的表达式求值封装类可以计算三角函数、反三角函数以及普通公式等等。代码易于修改且适合扩展,支持参数重新赋值进行计算等功能。 以下是该库的使用示例: ```cpp #include Express.h #include ExpValue.h #include VarValue.h int main() { // 表达式字符串 std::string strExpress = sin(A)*(3+B)-4/cos(C)*PI; CMapVariabile m_VarsMap; CExpression m_expression; // 初始化变量哈希表并绑定表达式对象与变量映射 m_VarsMap.InitHashTable(100); m_expression.AtachVariables(&m_VarsMap); // 参数赋值 CNumericValue *value = nullptr; value = new CNumericValue(); value->SetValue(12.22); m_VarsMap[_T(A)] = value; value = new CNumericValue(); value->SetValue(13.44); m_VarsMap[_T(B)] = value; value = new CNumericValue(); value->SetValue(567.987); m_VarsMap[_T(C)] = value; value = new CNumericValue(); value->SetValue(3.1415926); m_VarsMap[_T(PI)] = value; double dValue = 0; int result = m_expression.ChangeExpression(strExpress.c_str()); if (result < 0) { long res_val = m_expression.Value(dValue); if(res_val == DIVISION_BY_0) { // 如果出现除零错误 printf(亲,除零了.....-_-!\r\n); } else { printf(%s=%.2f\r\n, strExpress.c_str(), dValue); } } // 清理变量映射中的所有值并移除它们 POSITION pos = m_VarsMap.GetStartPosition(); while (pos != nullptr) { CString sName; CValue *pVal; m_VarsMap.GetNextAssoc(pos, sName, pVal); delete pVal; // 清理内存 } m_VarsMap.RemoveAll(); } ```
  • C++似于
    优质
    本项目旨在模拟编译器功能,实现一个能够解析并计算C++算术表达式的程序。通过词法分析和语法解析技术,将字符串形式的数学表达式转换为抽象语法树,并执行计算得出结果。适合对编译原理感兴趣的开发者学习实践。 《C++程序设计语言(特别版)》第6章介绍了表达式和语句,并提供了“6.1 一个桌面计算器”的代码实现示例。在Linux环境下编译并执行该程序后,输入r = 2.5会输出 2.5;接着输入 area = pi * r * r 则会得到结果 19.635。
  • C语言
    优质
    本项目使用C语言实现了一个能够解析并计算复杂算术表达式的程序。用户可以输入标准数学表达式,如3+4*2/(1-5)^2,程序会按照正确的运算顺序输出结果。此实现包括了对括号、基本运算符及优先级的支持。 此程序先将输入的中缀表达式转化为后缀表达式,然后计算后缀表达式的值,这展示了栈的应用。
  • C++
    优质
    这段C++程序旨在实现一个简单的表达式求值器,能够解析并计算包括加、减、乘、除在内的基本算术运算表达式。 用C++语言编写的一个程序可以计算各种表达式的值,例如800×(2+(5+2))。
  • C++
    优质
    本篇文章探讨了在C++中实现表达式求值的方法和技巧,旨在帮助开发者理解和优化其程序中的数学与逻辑运算处理。 数据结构中的一个小算法是表达式求值,采用C++编码,仅供参考。
  • C++
    优质
    本项目聚焦于C++环境中表达式的解析与计算,旨在探索高效准确的表达式求值算法设计,并提供一个灵活的应用框架。 表达式求值是程序设计语言编译中的基本问题之一。需要完成类的设计与实现,并使用算符优先法来解决这一问题。具体要求如下:(1)利用顺序栈作为运算符栈和操作数栈的实现基础;(2)通过二维数组存储各算符之间的优先级关系;(3)采用算符优先算法进行表达式的求值过程;(4)将上述功能设计为类中的成员函数,并编写主程序来测试这些功能。请使用C++语言完成代码实现。
  • C++
    优质
    本文介绍了如何使用C++编程语言来实现将中缀表达式转换为后缀表达式,并计算其结果的过程和算法。 使用C++编写了一个程序来计算字符串形式的中缀表达式的值。该代码能够实现算术表达式的词法分析,并支持多位整数的运算。其核心思路是将中缀表达式转换为后缀表达式,然后进行计算。
  • Java
    优质
    本项目采用Java语言开发,专注于高效准确地解析与计算数学表达式的值。它提供了一个强大的工具集,支持复杂运算和优先级处理,适用于需要动态计算功能的应用场景。 对使用+、-、*、/、(、)连接起来的算术表达式求值,并能够智能识别和过滤该表达式。
  • C语言
    优质
    本篇文章详细探讨了在C语言环境中如何高效地实现算术表达式的解析与计算,涵盖基础概念、运算符优先级及其实现技巧。 通过栈实现的算术表达式求值代码包括了将中缀表达式转换为后缀表达式的功能以及对后缀表达式的计算方法。
  • C
    优质
    本文探讨了在C语言编程环境中如何高效准确地实现数学表达式计算的方法和技术,包括基本算术运算及复杂表达式的解析与求值。 用C语言编写了一个计算表达式的代码,个人觉得还不错,但也不是很好。