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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? strtooper.cpp

?? DSP圖像處理程序源碼
?? CPP
字號(hào):
//
// StrToOper.cpp: Change a CSting to operation and calculate it
//copyright @ luda				lartely@163.com
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "StrToOper.h"

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

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

void CStrToOper::Clear(void)
{
	ErrId=0;
	Expression="";
	Result=0.0;
	x=0.0;
}

void CStrToOper::Initial(CString operation,double input)
{	ErrId=0;
	Result=0.0;
	int i;
	Expression=operation;
	x=input;
	CString unilligel=" _[]!@#$%&|\';:<>,?";
		for (i=0;i<unilligel.GetLength();i++)
	Expression.Remove(unilligel.GetAt(i));//去除非法的字符
	CString strPI,strX;
	strX.Format("%4.6f",x);
	Expression.Replace("exp","EXP");
	Expression.Replace("x",strX);
	strPI.Format("%4.6f",3.1415926);
	Expression.Replace("pi",strPI);
	Expression.MakeLower();
	ErrCheck();
}

void CStrToOper::ErrCheck(void)
{
	int leftParenthese=0,rightParenthese=0;
	int i;
	for (i=0;i<Expression.GetLength();i++)
	{
		if (Expression.GetAt(i)=='(')
			leftParenthese++;
		if (Expression.GetAt(i)==')')
			rightParenthese++;
	}
	if (leftParenthese<rightParenthese)
	{
		ErrId=ERR_MISSLEFTPARA;
		return;
	}
	if (leftParenthese>rightParenthese)
	{
		ErrId=ERR_MISSRIGHTPARA;
		return;
	}

}

const CString CStrToOper::GetErrMsg(void)
{
	static const CString errmsg[7] = {"no errors",
		"missing left parentheses",
		"missing right parentheses",
		"devide by zero",
		"unknown operator",
		"unknown error",
		"UNKNOWN ERROR ID"};
	if(ErrId >= 0 && ErrId < 6)
		return errmsg[ErrId];
	else
		return errmsg[6];
}

int CStrToOper::GetErrId(void)
{
	return ErrId;
}

double CStrToOper::Calculate(int type, double x, double y)
{ // 雙目運(yùn)算符的具體運(yùn)算
    
	if (type > 20 && type < 40) //處理雙目運(yùn)算
   		switch(type)  { // '+' , '-' , '*' , '/' , '^'
   		case OPTR_ADD : return ( x + y ); 
   		case OPTR_SUBTRACT : return ( x - y ); 
   		case OPTR_MULTIPLY : return ( x * y ); 
   		case OPTR_DIVIDE : 
			if (y == 0.0) 
				ErrId=ERR_DIVIDEBYZERO;
   			else
				return ( x / y );
    		break;
		case OPTR_POWER : return (pow( x, y));
		default : ErrId=ERR_UNKNOWNOPR; return 0.0;
		}
    else {
		ErrId=ERR_UNKNOWNOPR; 
		return 0.0;
    }
	return 0.0;
}

double CStrToOper::Calculate(int type, double x)
{// 單目運(yùn)算符的具體運(yùn)算
    static double (*fun[])(double)={sin, cos, tan, sqrt, 
		log10, log, fabs, asin, acos, atan, sinh,
		cosh, tanh, exp}; //*fname[]對(duì)應(yīng)的C函數(shù)名

		if(type>50) //函數(shù)運(yùn)算
			return ((*fun[type-51])(x));
		else {
			ErrId=ERR_UNKNOWNOPR; 
			return 0.0;
		}
	
	return 0.0;
}

bool CStrToOper::IsNum(CString str,int thisposition)
{
	if (isdigit(str.GetAt(thisposition))||(str.GetAt(thisposition)=='.')||(str.GetAt(thisposition)=='-')&&(!isdigit(str.GetAt(thisposition-1))))
		return TRUE;
	else return FALSE;
}
int CStrToOper::GetPreValue(CString str,int position,CString &str1)
{	
	int thisposition;
	thisposition=position-1;
	while (thisposition>0&&IsNum(str,thisposition))
	{
			thisposition--;
	}
	if (thisposition!=0) 
		thisposition++;
	str1=str.Mid(thisposition,position-thisposition);
    
return thisposition;
}

int CStrToOper::GetNextValue(CString str,int position,CString &str2)
{
	int thisposition=position+1;
   while (IsNum(str,thisposition)&&thisposition<str.GetLength()-1)
   {
	   thisposition++;
   }
   if (thisposition!=str.GetLength()-1) 
	   thisposition--;
   str2=str.Mid(position+1,thisposition-position);
   return thisposition;
}
double CStrToOper::ValueCalculate(CString str)//對(duì)只有數(shù)值和操作符的表達(dá)式進(jìn)行計(jì)算
{
	int flag=1;
	int i;
	int position;
	int position1;
	int position2;
	int preposition;
	int nextposition;
	int OPTR_SELECT;
	double tempresult;
	CString str1;
	CString str2;
	CString strpre,strmid,strnext;
	flag=(str.Find('^')!=-1);
   while (flag)									//處理最高級(jí)別^
   {  
	   position=str.Find('^');
	   preposition=GetPreValue(str,position,str1);
	   nextposition=GetNextValue(str,position,str2);
	   tempresult=Calculate(OPTR_POWER,atof(str1),atof(str2));
	   strpre=str.Left(preposition);
	   strmid.Format("%4.6f",tempresult);
	   strnext=str.Right(str.GetLength()-nextposition-1);
	   str=strpre+strmid+strnext;
	   flag=(str.Find('^')!=-1);
   }
	   
	flag=((str.Find('*')!=-1)||(str.Find('/')!=-1));
   while (flag)									//處理次高級(jí)別*,/
   {   position1=str.Find('*');
	   position2=str.Find('/');
	   if (((position1<position2)&&(position1!=-1))||(position2==-1))
	   {
		   position=position1;
		   OPTR_SELECT=OPTR_MULTIPLY;
	   }
	   else
	   {
		   position=position2;
		   OPTR_SELECT=OPTR_DIVIDE;
	   }
	   preposition=GetPreValue(str,position,str1);
	   nextposition=GetNextValue(str,position,str2);
	   tempresult=Calculate(OPTR_SELECT,atof(str1),atof(str2));
	   strpre=str.Left(preposition);
	   strmid.Format("%4.6f",tempresult);
	   strnext=str.Right(str.GetLength()-nextposition-1);	 
	   str=strpre+strmid+strnext;
	   flag=((str.Find('*')!=-1)||(str.Find('/')!=-1));
   }

   	flag=((str.Find('+')!=-1)||(str.Find('-',1)!=-1));
	i=0;
   while (flag)									//處理低級(jí)別+,-
   {   
	   position1=str.Find('+');
	   position2=str.Find('-',1);
	   i=position2+1;
	   if (((position1<position2)&&(position1!=-1))||(position2==-1))
	   {
		   position=position1;
		   OPTR_SELECT=OPTR_ADD;
	   }
	   else
	   {
		    position=position2;
			OPTR_SELECT=OPTR_SUBTRACT;
		}
	   preposition=GetPreValue(str,position,str1);
	   nextposition=GetNextValue(str,position,str2);
	   tempresult=Calculate(OPTR_SELECT,atof(str1),atof(str2));
	   strpre=str.Left(preposition);
	   strmid.Format("%4.6f",tempresult);
	   strnext=str.Right(str.GetLength()-nextposition-1);
	   str=strpre+strmid+strnext;
	   flag=(str.Find('+')!=-1)||(str.Find('-',1)!=-1);
   }
   tempresult=atof(str);
   return tempresult;
}


BOOL CStrToOper::GetOperType(CString str,int leftParentese,int &count,int &type)
{	type=0;
	count=3;		//操作符長(zhǎng)度
	CString strOpr;
	while (count<6)
	{
		if (leftParentese-count<0) return FALSE;
		else  
		{	strOpr=str.Mid(leftParentese-count,count);
			
			if (strOpr=="sin")type=51;
			if (strOpr=="cos")type=52;
			if (strOpr=="tan")type=53;
			if (strOpr=="sqrt")type=54;
			if (strOpr=="log10")type=55;
			if (strOpr=="log")type=56;
			if (strOpr=="fabs")type=57;
			if (strOpr=="asin")type=58;
			if (strOpr=="acos")type=59;
			if (strOpr=="atan")type=60;
			if (strOpr=="sinh")type=61;
			if (strOpr=="cosh")type=62;
			if (strOpr=="tanh")type=63;
			if (strOpr=="exp")type=64;
			if (type!=0) return TRUE;
				
		}
		count++;
	}
	return FALSE;
}

CString CStrToOper::RemoveParentheses()				//將表達(dá)式變成數(shù)值表達(dá)式
{
	int flag,count=0,type;
	int leftParenthese,rightParenthese;
	CString str=Expression;
	CString strpre,strmid,strnext;
	flag=(str.Find(')')!=-1);
	while (flag)
	{
		rightParenthese=str.Find(')');
		leftParenthese=rightParenthese-1;
		while (str.GetAt(leftParenthese)!='(')
		{
			leftParenthese--;
		}
		if (leftParenthese==0||!isalnum(str.GetAt(leftParenthese-1)))
		{
			strpre=str.Left(leftParenthese);
			strmid.Format("%4.6f",ValueCalculate(str.Mid(leftParenthese+1,rightParenthese-leftParenthese-1)));
			strnext=str.Right(str.GetLength()-rightParenthese-1);
		}
		else 
		{
			if (GetOperType(str,leftParenthese,count,type))
			{
				strpre=str.Left(leftParenthese-count);
				strmid.Format("%4.6f",Calculate(type,ValueCalculate(str.Mid(leftParenthese+1,rightParenthese-leftParenthese-1))));
				strnext=str.Right(str.GetLength()-rightParenthese-1);
			}
			else
			{
				ErrId=ERR_UNKNOWNOPR;
				break;
			}
		}
		str=strpre+strmid+strnext;
		flag=(str.Find(')')!=-1);
	}
	return str;
}

void CStrToOper::Computer()
{   CString strValue;
	strValue=RemoveParentheses();                    
	Result=ValueCalculate(strValue);
}

double CStrToOper::GetResult(void)
{	if (ErrId==0)
	Computer();
	return Result;
}

CStrToOper::~CStrToOper()
{

}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美色视频在线| 欧美日韩精品免费观看视频| 一区二区日韩电影| 337p粉嫩大胆噜噜噜噜噜91av| 日本国产一区二区| 国产酒店精品激情| 天天综合日日夜夜精品| 亚洲色欲色欲www在线观看| 精品久久久久久无| 在线成人免费观看| 在线免费不卡视频| av色综合久久天堂av综合| 国产麻豆精品theporn| 日韩国产一二三区| 性欧美大战久久久久久久久| **欧美大码日韩| 国产欧美日韩三区| 久久精品视频网| 亚洲精品一区二区三区四区高清| 欧美久久一二三四区| 欧美在线观看18| 91黄视频在线观看| 色94色欧美sute亚洲13| 93久久精品日日躁夜夜躁欧美| 国产精品538一区二区在线| 九色综合狠狠综合久久| 男女男精品视频网| 男人的j进女人的j一区| 日本不卡不码高清免费观看| 天堂在线一区二区| 天堂蜜桃一区二区三区 | 亚洲第一会所有码转帖| 亚洲男人电影天堂| 亚洲免费在线视频| 亚洲免费av高清| 一个色在线综合| 亚洲一区二区五区| 亚洲成国产人片在线观看| 亚洲成人自拍偷拍| 视频在线观看国产精品| 日韩精品一二区| 久久精品噜噜噜成人av农村| 久久99国产精品久久| 国内一区二区视频| 国产91综合网| 99精品黄色片免费大全| 色综合天天性综合| 在线一区二区三区做爰视频网站| 欧美日韩中文另类| 日韩欧美中文字幕一区| 日韩午夜在线播放| 久久你懂得1024| 国产日本亚洲高清| 成人欧美一区二区三区白人 | 亚洲精品久久久久久国产精华液| 国产嫩草影院久久久久| 中文幕一区二区三区久久蜜桃| 国产午夜精品久久久久久久 | 91精品免费观看| 日韩久久免费av| 国产亲近乱来精品视频| 亚洲欧洲一区二区三区| 亚洲成人中文在线| 国产综合久久久久久鬼色| www.在线成人| 欧美日韩国产一级二级| 久久看人人爽人人| 亚洲九九爱视频| 亚洲动漫第一页| 国产一区二区三区最好精华液| 91在线小视频| 777精品伊人久久久久大香线蕉| 久久久99免费| 精品1区2区在线观看| 国产精品激情偷乱一区二区∴| 亚洲免费av观看| 精品一区二区久久| 99精品在线观看视频| 夜夜夜精品看看| 蜜臀av性久久久久av蜜臀妖精| 高清国产午夜精品久久久久久| 在线观看视频一区二区| 2017欧美狠狠色| 亚洲国产成人av网| 国产福利精品一区二区| 欧美精品日日鲁夜夜添| 亚洲国产经典视频| 日本在线不卡视频一二三区| 99热国产精品| 精品成人私密视频| 一区二区三区成人| 国产成人在线观看免费网站| 欧美性猛片xxxx免费看久爱| 欧美经典一区二区三区| 日韩精品欧美精品| 色综合天天做天天爱| 精品国产一区二区三区忘忧草| 亚洲激情图片一区| 成人免费黄色在线| 精品久久久久久久一区二区蜜臀| 亚洲一区电影777| 94-欧美-setu| 国产拍揄自揄精品视频麻豆| 蜜臀av性久久久久蜜臀aⅴ四虎| 在线免费不卡视频| 1024成人网| 成人激情电影免费在线观看| 精品国产人成亚洲区| 亚洲成av人片一区二区梦乃 | 高清不卡一二三区| 日韩美女天天操| 爽爽淫人综合网网站| 日本韩国一区二区三区| 中文字幕亚洲不卡| 国产激情一区二区三区| 日韩三级视频在线看| 午夜影院在线观看欧美| 97se亚洲国产综合自在线| 国产精品色婷婷| 国产91丝袜在线观看| 精品福利av导航| 全部av―极品视觉盛宴亚洲| 欧美色图12p| 亚洲午夜在线电影| 欧美性极品少妇| 一区二区三区在线视频观看58| 99久久国产综合精品麻豆| 国产精品情趣视频| 成人黄色av电影| 中文字幕在线不卡一区| 成人免费视频caoporn| 日本一区二区视频在线观看| 丁香激情综合五月| 国产精品久久久爽爽爽麻豆色哟哟| 成人综合婷婷国产精品久久蜜臀 | 亚洲色图视频免费播放| jizzjizzjizz欧美| 亚洲精品免费一二三区| 在线一区二区三区做爰视频网站| 亚洲午夜在线观看视频在线| 欧美日韩中文国产| 免费黄网站欧美| 精品欧美久久久| 国产91对白在线观看九色| 亚洲欧洲一区二区在线播放| 一本到一区二区三区| 亚洲1区2区3区4区| 欧美一区二区黄色| 国产一区二区三区黄视频| 国产精品视频一二三区| 一道本成人在线| 日韩精品久久理论片| 精品欧美黑人一区二区三区| 大美女一区二区三区| 综合激情网...| 欧美精品丝袜中出| 国产一区二区主播在线| 中文字幕一区二区在线播放| 91久久一区二区| 无码av中文一区二区三区桃花岛| 欧美岛国在线观看| 成人激情黄色小说| 午夜久久久影院| 欧美zozozo| 97久久超碰国产精品| 亚洲成精国产精品女| 欧美精品一区二区三区一线天视频 | 亚洲三级理论片| 在线成人高清不卡| 懂色一区二区三区免费观看| 一区二区三区日韩欧美| 日韩精品一区二区三区在线播放 | 91视频国产观看| 欧美aⅴ一区二区三区视频| 亚洲国产精品ⅴa在线观看| 欧美唯美清纯偷拍| 国产精品18久久久久久久久久久久| 亚洲免费资源在线播放| 精品日韩一区二区| 在线观看成人免费视频| 韩国av一区二区三区在线观看| 亚洲欧美国产三级| 欧美精品一区二区三区视频| 在线精品视频免费播放| 狠狠色丁香婷婷综合| 亚洲国产一区二区三区青草影视| 久久久电影一区二区三区| 欧美日韩不卡在线| av中文字幕在线不卡| 久久精品国产秦先生| 一区二区久久久久久| 国产日韩欧美不卡在线| 欧美一级二级在线观看| 色综合久久天天| 成人午夜短视频| 美女脱光内衣内裤视频久久网站 | 日韩中文字幕区一区有砖一区| 中文字幕第一区第二区| 日韩欧美亚洲国产精品字幕久久久| 色综合欧美在线视频区|