亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mathstring.cpp

?? 該類有以下特點: 1.支持字符串中含有各種常用函數
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
// MathString.cpp: implementation of the CMathString class.
//
////////////////////////////////////////////////////////////////////
// MathString.cpp: implementation of the CMathString class.
//
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////                    
//
//                   求算術表達式值的類
//
//              湖南城市學院  信息與計算科學系  
//                        黃江峰
//                 jiangfenghuang@msn.com
//                 jiangfenghuang@163.net
//                       2003.4.5           
//
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
//
// 功能:
//      求在字符串中的算術表達式的值,
//   
// 特點:
//      1.支持字符串中含有各種常用函數,如"7.5+sin(6*ln(8))/exp(5)"
//      2.具有很好的糾錯能力,能檢查出表達式中括號是否配對、庫函數是
//        否正確
//      3.運算過程中能檢查出各種異常,如除數為0、開方函數sqrt(x)中x<0
//        反余弦函數acos(x)中的x<-1或x>1等
//      4.為支持積分、求方程,算術表達式中可含有x,計算時將用類中的成
//        員變量xx代替 
//////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////// 
//
// 使用方法:
//      1. 定義一個CMathString 的對象,用要求的算術表達式將其初始化
//         如: char *s1="7.5+sin(6)/exp(5)";
//              char *s2="4*pow(x,2)+2*x+4";
//              CMathString  mathstr1(s1);
//              CMathString  mathstr2(s2);
//        或調用Initial(char *s)、Initial(char *s,double x)將其初始化
//      2.調用checkString方法檢查表達式是否合法
//      3.如果是求積分或j解方程,調用setX(double x)設置表達式中x的值
//      4.調用stringToBolan()將算術表達式轉換為波蘭表達式
//      5.調用compvalue()對波蘭表達式進行計算,若返回值為0,則調
//        用getvalue()取得計算結果,否則可根據返回值判斷出錯地方
//
/////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////
//
//                支持的函數的編號及功能
//
// 編號     函數         功能         調用的math.h庫函數     備注
//
//   1      abs(x)      取絕對值|x|    fabs(x)      
//   2      acos(x)     反余弦函數     acos(x)            -1<=x<=1
//   3      asin(x)     反正弦函數     asin(x)            -1<=x<=1
//   4      atan(x)     反正切函數     atan(x)
//   5      acot(x)     反余切函數     PI/2-atan(x)
//   6      cos(x)      余弦函數       cos(x)
//   7      cosh(x)     雙曲余弦函數   cosh(x)
//   8      cot(x)      余切函數       1/tan(x)            tan(x)!=0
//   9      exp(x)      e的x次方       exp(x)
//  10      floor(x)    ⊥x⊥          floor(x)   求不大于x的最大整數 
//  11      mod(x,y)     x%y           mod(x,y)             y!=0
//  12      ln(x)       取自然對數     log(x)               x>0
//  13      log(x)      取10的對數     log10(x)             x>0
//  14      pow(x,y)    x的y次方       pow(x,y)
//  15      sin(x)      正弦函數       sin(x)
//  16      sinh(x)     雙曲正弦函數   sinh(x)
//  17      sqrt(x)     對x開方        sqrt(x)            x>=0
//  18      tan(x)      正切函數       tan(x)
//  19      tanh(x)     雙曲正切函數   tanh(x)
//
/////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "MathString.h"
#include "math.h"

#define PI  3.1415926

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CMathString::CMathString()
{

}

CMathString::~CMathString()
{

}


CMathString::CMathString(char *str)  //構造函數,將算術表達式str賦給String
{
	strcpy(string,str);            
}

CMathString::CMathString(char *str,double x)
{    //表達式中帶未知數的構造函數
	 //算術表達式*s賦給string,未知數x賦給xx
	 //用于積分表達式
	strcpy(string,str);
	xx=x;
}

void CMathString::setX(double x)      //設置成員變量xx的值
{
	xx=x;
}

int CMathString::seekStr(char *str,int &i, char *s)
{   //檢查字符竄str的第i個位置開始的后面字符是否與字符竄s相匹配
	//是的話將i=i+len(s),并返回1,否則返回0
	int j=0;
	for(j=0;j<strlen(s);j++)
		if(str[i+j]!=s[j])
			break;
	if(j==strlen(s))
	{
		i=i+strlen(s);
		return 1;
	}
	else return 0;
}

void CMathString::Initial(char *s)  //初始化函數,將算術表達式s賦給String
{
	strcpy(string,s); 

}

void CMathString::Initial(char *str, double x)
{
	//表達式中帶未知數的初始化函數
	 //算術表達式*str賦給string,未知數x賦給xx
	 //用于積分表達式
	strcpy(string,str);
	xx=x;

}


int CMathString::checkString()
{ //檢查輸入的表達式是否正確,包括括號是否配對、庫函數是否正確,
  //不包括小數點是否正確,若正確,將表達式中的大、中括號該成小括號
  //并在表達式尾加‘#’標識
  //若正確,返回值為1;否則返回0;
  //因積分表達式中有x,所以表達式中的x作為字符處理
	char st[MAX/2];        //存放括號的棧
	int top=0,     //棧頂
		i;
	for(i=0;string[i]!='\0';i++)
	{
		//如果是左括號,則入棧
		if(string[i]=='(' || string[i]=='[' || string[i]=='{')
		{  //如果是左括號,則入棧
			top++;
			st[top]=string[i];
			continue;
		}
        
		//小括號
		if(string[i]==')')   //小括號
		{  
			if(st[top]=='(')   //配對
			{
				top--;         //出棧
				continue;
			}
			else return 0;    //不配對,返回0
		}
        //中括號
		if(string[i]==']')    
		{  
			if(st[top]=='[')   //配對
			{
				top--;         //出棧
				continue;
			}
			else return 0;    //不配對,返回0
		}
		//大括號
		if(string[i]=='}')    
		{  
			if(st[top]=='{')   //配對
			{
				top--;         //出棧
				continue;
			}
			else return 0;    //不配對,返回0
		}

		//運算符
		if(string[i]=='+' || string[i]=='-' || string[i]=='*' || string[i]=='/')
		{   //如果有連續運算符則錯誤
			if(string[i+1]=='+' || string[i+1]=='-' || string[i+1]=='*' ||string[i+1]=='/')
				return 0;  //錯誤,返回0
			else
				continue;  //無連續運算符情況
		}

		//數字、小數點、逗號
 		if(('0'<=string[i] && string[i]<='9') || string[i]=='.'
			||string[i]==',')
 			continue;

		//未知數x
		if(string[i]=='x')
			continue;

		//是以a開頭的函數
		if(string[i]=='a')
		{
			if(seekStr(string,i,"abs")||seekStr(string,i,"acos")||
				seekStr(string,i,"asin")||seekStr(string,i,"atan")||
				seekStr(string,i,"acot"))//是以a開頭的庫函數
			{
				if(string[i]=='('||string[i]=='['||string[i]=='{')
				{   //如果函數后是括號
					st[++top]=string[i];  // 括號入棧  
					continue;
				}
				else //如果函數后不是括號,返回0
					return 0;
			}
			else    //不是以a開頭的庫函數,返回0
				return 0;
		}

		//是以c開頭的函數
		if(string[i]=='c')
		{
			if(seekStr(string,i,"cos")||seekStr(string,i,"cosh")||
				seekStr(string,i,"cot"))
			{
				if(string[i]=='('||string[i]=='['||string[i]=='{')
				{   //如果函數后是括號
					st[++top]=string[i];  // 括號入棧  
					continue;
				}
				else //如果函數后不是括號,返回0
					return 0;
			}
			else    //不是以c開頭的庫函數,返回0
				return 0;
		}
		//是以e開頭的函數
		if(string[i]=='e')
		{
			if(seekStr(string,i,"exp"))
			{
				if(string[i]=='('||string[i]=='['||string[i]=='{')
				{   //如果函數后是括號
					st[++top]=string[i];  // 括號入棧  
					continue;
				}
				else //如果函數后不是括號,返回0
					return 0;
			}
			else    //不是以e開頭的庫函數,返回0
				return 0;
		}
		//是以f開頭的函數
		if(string[i]=='f')
		{
			if(seekStr(string,i,"floor"))
			{
				if(string[i]=='('||string[i]=='['||string[i]=='{')
				{   //如果函數后是括號
					st[++top]=string[i];  // 括號入棧  
					continue;
				}
				else //如果函數后不是括號,返回0
					return 0;
			}
			else    //不是以f開頭的庫函數,返回0
				return 0;
		}
		//是以m開頭的函數
		if(string[i]=='m')
		{
			if(seekStr(string,i,"mod"))
			{
				if(string[i]=='('||string[i]=='['||string[i]=='{')
				{   //如果函數后是括號
					st[++top]=string[i];  // 括號入棧  
					continue;
				}
				else //如果函數后不是括號,返回0
					return 0;
			}
			else    //不是以m開頭的庫函數,返回0
				return 0;
		}
		//是以l開頭的函數
		if(string[i]=='l')
		{
			if(seekStr(string,i,"ln")||seekStr(string,i,"log"))
			{
				if(string[i]=='('||string[i]=='['||string[i]=='{')
				{   //如果函數后是括號
					st[++top]=string[i];  // 括號入棧  
					continue;
				}
				else //如果函數后不是括號,返回0
					return 0;
			}
			else    //不是以l開頭的庫函數,返回0
				return 0;
		}
		//是以p開頭的函數
		if(string[i]=='p')
		{
			if(seekStr(string,i,"pow"))
			{
				if(string[i]=='('||string[i]=='['||string[i]=='{')
				{   //如果函數后是括號
					st[++top]=string[i];  // 括號入棧  
					continue;
				}
				else //如果函數后不是括號,返回0
					return 0;
			}
			else    //不是以p開頭的庫函數,返回0
				return 0;
		}
		//是以s開頭的函數
		if(string[i]=='s')
		{
			if(seekStr(string,i,"sin")||seekStr(string,i,"sinh")||
				seekStr(string,i,"sqrt"))
			{
				if(string[i]=='('||string[i]=='['||string[i]=='{')
				{   //如果函數后是括號
					st[++top]=string[i];  // 括號入棧  
					continue;
				}
				else //如果函數后不是括號,返回0
					return 0;
			}
			else    //不是以s開頭的庫函數,返回0
				return 0;
		}
		//是以t開頭的函數
		if(string[i]=='t')
		{
			if(seekStr(string,i,"tan")||seekStr(string,i,"tanh"))
			{
				if(string[i]=='('||string[i]=='['||string[i]=='{')
				{   //如果函數后是括號
					st[++top]=string[i];  // 括號入棧  
					continue;
				}
				else //如果函數后不是括號,返回0
					return 0;
			}
			else    //不是以t開頭的庫函數,返回0
				return 0;
		}
		
		else // 如果string[i]是其他字符,則返回0
			return 0;
	}//for(i=0;string[i]!='\0';i++)
	
	if(top!=0)       //括號不匹配,返回0
		return 0;
    
	//表達式正確
	//在表達式尾加‘#’標識
	string[i]='#';
	string[++i]='\0';

	//將表達式中的大、中括號該成小括號
	for(i=0;string[i]!='\0';i++)
	{
		if((string[i]=='[')||(string[i]=='{'))
			string[i]='(';
		else if((string[i]==']')||(string[i]=='}'))
			string[i]=')';
	}
	return 1;	
}

//將算術表達式string轉化成波蘭表達式,
//波蘭表達式放在bolan[]中

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一本色道久久综合精品竹菊| 国产69精品一区二区亚洲孕妇| 91伊人久久大香线蕉| 日韩欧美高清dvd碟片| 亚洲一区二区三区四区在线| 国产**成人网毛片九色 | 韩国理伦片一区二区三区在线播放 | 亚洲美女视频在线观看| 国产精品一区二区久久精品爱涩| 欧美精品在线观看播放| 亚洲激情av在线| 成人av资源下载| 国产欧美日韩视频在线观看| 久久99国产精品尤物| 4438x亚洲最大成人网| 亚洲一区二区在线观看视频| 91视频一区二区| 国产精品区一区二区三| 国产麻豆午夜三级精品| 日韩午夜电影在线观看| 视频一区二区欧美| 欧美日韩三级一区二区| 日韩毛片在线免费观看| av中文字幕在线不卡| 国产亚洲一本大道中文在线| 国产一区在线观看视频| 精品国内二区三区| 激情都市一区二区| 精品欧美一区二区三区精品久久| 免费高清视频精品| 日韩情涩欧美日韩视频| 日韩国产精品久久久久久亚洲| 欧美日韩在线观看一区二区 | 久久夜色精品国产欧美乱极品| 免费观看成人鲁鲁鲁鲁鲁视频| 欧美精选午夜久久久乱码6080| 亚洲国产美女搞黄色| 欧洲亚洲国产日韩| 亚洲一区成人在线| 欧美日韩精品欧美日韩精品一 | 男人操女人的视频在线观看欧美| 一区二区三区美女| 91视视频在线观看入口直接观看www| 中文字幕一区二区三区乱码在线| 99久久久无码国产精品| 亚洲男同性视频| 欧美午夜寂寞影院| 天天操天天综合网| 欧美一二三四区在线| 经典三级在线一区| 国产清纯白嫩初高生在线观看91 | 五月天激情综合| 91精品国产美女浴室洗澡无遮挡| 欧美aaa在线| 精品国产91乱码一区二区三区| 国产一区不卡精品| 欧美高清在线精品一区| 99精品欧美一区| 亚洲国产成人高清精品| 67194成人在线观看| 久久99热狠狠色一区二区| 欧美精品一区二区三区久久久 | 蜜桃视频一区二区| 久久影院午夜片一区| 成人av网站在线观看| 亚洲精品成人悠悠色影视| 欧美三电影在线| 狠狠色丁香九九婷婷综合五月| 久久精品亚洲乱码伦伦中文| 91在线精品一区二区| 亚洲成a人在线观看| 久久亚洲免费视频| 色悠悠亚洲一区二区| 视频在线观看国产精品| 久久久久久久久97黄色工厂| 色综合天天综合色综合av| 波多野结衣一区二区三区| 亚洲精品写真福利| 欧美一级片在线看| 成人永久免费视频| 亚洲国产精品久久人人爱蜜臀| 日韩欧美自拍偷拍| 99r精品视频| 蜜臀av性久久久久蜜臀aⅴ流畅 | 亚洲午夜电影在线观看| 日韩一区二区三区三四区视频在线观看 | 九九**精品视频免费播放| 国产精品久久久久一区二区三区共| 欧美日韩在线不卡| 国产成人午夜高潮毛片| 亚洲电影你懂得| 国产日韩精品一区二区三区在线| 亚洲精品日韩专区silk| 欧美xfplay| 欧美在线999| 精品亚洲免费视频| 亚洲综合清纯丝袜自拍| 久久新电视剧免费观看| 欧美三级蜜桃2在线观看| 国产美女娇喘av呻吟久久| 一区二区三区蜜桃网| 国产欧美视频一区二区三区| 欧美高清视频www夜色资源网| 成人综合婷婷国产精品久久蜜臀| 午夜电影久久久| 日韩一区日韩二区| 久久一区二区三区四区| 欧美电影一区二区三区| 99精品国产一区二区三区不卡| 久久国产免费看| 亚洲国产中文字幕| 国产精品欧美久久久久一区二区| 日韩欧美亚洲一区二区| 91福利区一区二区三区| 国产成人av资源| 蜜桃久久久久久| 亚洲成人动漫精品| 日韩美女视频一区二区| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 欧美国产一区二区| 日韩三级视频在线看| 欧美综合一区二区| www.66久久| 国产成人综合视频| 寂寞少妇一区二区三区| 日韩精品亚洲专区| 亚洲国产综合色| 亚洲精品高清视频在线观看| 国产精品美女视频| 国产日韩欧美亚洲| 精品国产免费久久| 91精品国产高清一区二区三区| 欧美在线视频不卡| 91在线精品一区二区| eeuss鲁片一区二区三区在线观看| 国产精品一区二区久久不卡| 免费欧美高清视频| 日本 国产 欧美色综合| 五月天精品一区二区三区| 亚洲国产精品一区二区久久| 尤物在线观看一区| 亚洲欧美日韩国产成人精品影院| 国产精品视频一区二区三区不卡| 国产日韩欧美一区二区三区综合| 久久免费看少妇高潮| 精品欧美久久久| 首页国产欧美久久| 欧美日韩精品一区二区在线播放| www.综合网.com| 成人av小说网| 99riav久久精品riav| fc2成人免费人成在线观看播放| 成人福利视频在线看| 成人免费观看视频| 成人精品小蝌蚪| 成人福利视频网站| 99精品视频一区二区| 91网页版在线| 在线国产亚洲欧美| 欧美日韩一本到| 制服丝袜国产精品| 日韩午夜激情av| 久久久久久久久久久久久女国产乱 | 欧美国产日韩一二三区| 国产精品无码永久免费888| 中文天堂在线一区| 自拍偷拍亚洲综合| 亚洲人成影院在线观看| 亚洲一区二区三区在线播放| 亚洲国产乱码最新视频 | 美女免费视频一区二区| 国内成人自拍视频| 成人性生交大片免费看中文| av电影天堂一区二区在线 | 国产自产高清不卡| 国产很黄免费观看久久| 99久久99久久精品免费观看| 在线亚洲一区二区| 日韩一区二区三区在线| 国产午夜精品久久久久久久| 亚洲日本一区二区| 亚洲妇女屁股眼交7| 久久99精品一区二区三区三区| 国产激情视频一区二区在线观看| 91丨porny丨中文| 欧美人妇做爰xxxⅹ性高电影| 欧美不卡一区二区三区| 日本一区二区三区四区在线视频| 亚洲美女在线国产| 蜜桃av一区二区在线观看| 国产精品亚洲成人| 91福利视频久久久久| 欧美电影免费提供在线观看| 国产精品美女视频| 日韩精品电影一区亚洲| 国产精品白丝av| 欧美午夜电影一区| 精品国产91亚洲一区二区三区婷婷 | 制服丝袜在线91| 国产精品天美传媒|