?? 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 + -