📄 express.h
字号:
// Express.h: interface for the CExpress class.
//
//////////////////////////////////////////////////////////////////////
/************************************************************************/
/* 表达式计算类: CExpress
版权声明:该类版权属于 南京航空航天大学 能源与动力学院 庄三少
用于其它商业用途前,请先通知作者,否则视为违法。
庄三少 TEL:13512524413 09.3.19
*/
/************************************************************************/
#if !defined(AFX_EXPRESS_H__FFB6A3DB_D1EC_4C79_BAE1_7C371113D1C4__INCLUDED_)
#define AFX_EXPRESS_H__FFB6A3DB_D1EC_4C79_BAE1_7C371113D1C4__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
/************************************************************************/
/* 有关三角函数用角度计算,请输入输出时自己转换 */
/************************************************************************/
#define SIN 0
#define COS 1
#define TAN 2
#define EXP 3
#define LOG 4
#define ASIN 5
#define ACOS 6
#define ATAN 7
#define SIGN 8
#define POW 9
#define PI 3.1415926
class CExpress
{
public:
CExpress();
virtual ~CExpress();
/************************************************************************/
/* 主函数 南京航空航天大学 庄三少 09.3.17 tel:13512524413 */
/************************************************************************/
//主函数,输入一字符串表达式得到计算结果
double GetResultFrString(CString str);
//step[100]用于存储计算步骤,显示计算内容,最多100步,stepNum 为当前部数
CString step[100];
int stepNum;
//用于符号计算,parm为符号,val为表达式中替代符号的数值。比如:result=GetResultFrString1("sin[X]","X",30.0),result=GetResultFrString1("sin[Y]","Y",30.0),
double GetResultFrString1(CString str,CString parm,double val);//一个未知参数
double GetResultFrString2(CString str,CString parm1,double val1,CString parm2,double val2);//两个未知参数
double GetResultFrStringN(CString str,CString parm[],double val[],int N);//N个未知参数
private:
//////////////////////////////////////////////////////
/*
基础函数 南京航空航天大学 庄三少 09.3.17 tel:13512524413
*/
//由起始位置和终止位置得到表达式两者之间的内容
CString GetStrFromStartAndEnd(CString str,int start,int end);
//判断表达式中是否有括号
bool IsContainBracket(CString str);
//若存在括号,则获得最内层括号位置
void GetBracketPos(CString str,int *start,int *end);
//用一段字符代替两个位置之间的内容
CString ReplaceBetweenPos(CString toBeReplace,CString str,int start,int end);
//判断表达式中是否含有符号函数
bool IsContainSign(CString str);
//获得最内层符号函数类型,即符号函数中不存在符号函数,分别返回函数名的位置和参数扩号[]的位置
int GetSignStyle(CString str,int *sing_s,int *sign_e,int *p_s,int *p_e);
//获得参数表达式
CString GetParmString(CString str,int start,int end);
//如果是双参数的话,则分别得到每个参数的表达式
void GetParmTwo(CString str,int start,int end,CString *s1,CString *s2);
//判断是否存在加减乘除
bool IsJJCC(CString str);
bool IsAddExist(CString str);//+
bool IsPulsExist(CString str);//-
bool IsTimesExist(CString str);//*
bool IsDivideExist(CString str);//chu
//达到加减乘除的两个参数
void GetJJCCTwoParm(CString str,int pos,CString *s1,CString *s2,int *p_start,int *p_end);
//若存在加减乘除的话,先判断符号类型,再获得加减乘除号的位置,输入具体体判别类型,将获得该符号从左向右的第一个位置
//调用判别函数后再调用该函数
int GetJJCCPos(CString str,CString style);
//得到加减乘除号的数目
int GetJJCCNum(CString str,CString name);
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/************************************************************************/
/* 中间函数 */
/************************************************************************/
////计算无符号函数,无括号表达式的值
void GetSingleValue(CString str,double &result);
//计算含有符号函数的,无括号的表达式
void GetSignFuncVal(CString str,double &result);
//计算括号内容
void GetBracketResult(CString str,double &result);
////////计算步骤及结果存储为文件 result.txt
FILE *resultF;
///////////预处理函数,包括将大写字母转换为小写,检查表达式合法形
BOOL Cheak(CString &str);
};
#endif // !defined(AFX_EXPRESS_H__FFB6A3DB_D1EC_4C79_BAE1_7C371113D1C4__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -