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

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

?? expression final.cpp

?? 便宜原理實驗,算符優先,構造了優先關系矩陣
?? CPP
字號:
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<string.h>
//--------------------------------------------------------------------------
#define MaxCharNum						2048
#define MaxNodeNum						1024


#define ProcessSuccessful               0
#define NumberFormatError               1 
#define UnidentifiableCharIncluded      2
#define UnsupportedOperatorIncluded     3
#define UnmatchableExpression           4

#define ValMask                         0x1000 

#define OP_ParenthesisL                 0x0000 
#define OP_ParenthesisR                 0x0001 
#define OP_Not                          0x0002
#define OP_Mul                          0x0003
#define OP_Div                          0x0004
#define OP_Add                          0x0005
#define OP_Minus                        0x0006
#define OP_Equals                       0x0007
#define OP_HashKey                      0x0008

#define ValLong                         0x1010
#define ValFloat                        0x1020

//--------------------------------------------------------------------------
struct TerminalNode{
	int		category;
	float	val;
};

//--------------------------------------------------------------------------
char OperatorName[]={'(',')','!','*','/','+','-','=','#'};
int priority[9][9]={{-1,0,-1,-1,-1,-1,-1,-1,2},
					{2,1,1,1,1,1,1,1,1},
					{-1,1,-1,1,1,1,1,1,1},
					{-1,1,-1,1,1,1,1,1,1},
					{-1,1,-1,1,1,1,1,1,1},
					{-1,1,-1,-1,-1,1,1,1,1},
					{-1,1,-1,-1,-1,1,1,1,1},
					{-1,1,-1,-1,-1,-1,-1,1,1},
					{-1,2,-1,-1,-1,-1,-1,-1,0}};

//--------------------------------------------------------------------------
int isOperator(char);
int GetTerminalList(char *exp,TerminalNode *tlist,int &point);
int getResult(TerminalNode *tlist,int terminalNum,int &retval);

//--------------------------------------------------------------------------
int main(int argc, char* argv[]){
	int		retval,terminalNum;
	char	exp[MaxCharNum];			//inputed string
	TerminalNode	tlist[MaxNodeNum];	//array of terminal characters
	while(1){
		gets(exp);
		if(!strcmp(exp,"q")) break;		//inputed "q", then quit
		if(!strcmp(exp,"")) continue;	//inputed nothing, go on
		switch(GetTerminalList(exp,tlist,terminalNum)){
			case NumberFormatError:
				printf("Number format error.\n");
				continue;
			case UnidentifiableCharIncluded:
				printf("Unidentifiable character included.\n");
				continue;
			case UnsupportedOperatorIncluded:
				printf("Unsupported operator included.\n");
				continue;
			case ProcessSuccessful:
				printf("Process successful.\n");
		}

		switch(getResult(tlist,terminalNum,retval)){
			case ProcessSuccessful:
				if(tlist[0].category==ValLong)
					printf("The result of this expression is %ld\n",(long)tlist[0].val);
				else printf("The result of this expression is %g\n",tlist[0].val);
				break;
			case UnmatchableExpression:
				printf("Error: Unmatchable expression.\n");
				printf("       at: %d\n",retval);	//display the position of the error
				break;
		}
	}
	return 0;
}
//--------------------------------------------------------------------------
int isOperator(char ch){
	for(int i=0;i<8;i++)
		if(ch==OperatorName[i]) return i;
	return -1;
}

//--------------------------------------------------------------------------
int GetTerminalList(char *exp,TerminalNode *tlist,int &pos){
	int		point=0,spos=0,chartype;
	char	buffer[256];

	tlist[0].category = OP_HashKey;
	pos = 1;

	while(exp[spos] != 0){
		if( isspace(exp[spos]) ){	//tab, space, enter and so on
			spos++;
			continue;
		}
		else if( (chartype=isOperator(exp[spos])) != -1){	//operator
			if(chartype==OP_Equals)                             //++
				if( isOperator(exp[spos+1])==OP_Equals )	spos++;
			spos++;
			tlist[pos].category = chartype;
		}
		else if( isdigit(exp[spos]) ){	//digit
			point = 0;
			tlist[pos].category = ValLong;
			while(isdigit(exp[spos++])) buffer[ point++ ] = exp[spos-1];
			if(exp[spos-1] == '.'){
				tlist[pos].category = ValFloat;
				buffer[point++] = '.';
				while(isdigit(exp[spos++])) buffer[point++] = exp[spos-1];
			}
			if(exp[spos-1]=='e'||exp[spos-1]=='E'){
				tlist[pos].category = ValFloat;
				buffer[point++] = 'e';
				if(exp[spos]=='+' || exp[spos]=='-'){
					buffer[point++] = exp[spos];
					spos++;
				}
				if(!isdigit(exp[spos])) return NumberFormatError;
				while(isdigit(exp[spos++])) buffer[point++]=exp[spos-1];
			}
			buffer[point]=0;
			tlist[pos].val = (float)atof(buffer);
			spos--;
		}
		else return UnidentifiableCharIncluded;

		//---------------------Display the information of the character-----
		if( (tlist[pos].category&ValMask) == 0 )
			printf("Category: Operator  Value: %10c\n",OperatorName[tlist[pos].category]);
		else{
			if(tlist[pos].category==ValLong)
				printf("Category: Long      Value: %10ld\n",(long)tlist[pos].val);
			else printf("Category: Float     Value: %10g\n",tlist[pos].val);
		}
		pos++;
	}

	tlist[pos].category=OP_HashKey;
	pos++;
	return ProcessSuccessful;
}

//--------------------------------------------------------------------------
int getResult(TerminalNode *tlist,int terminalNum,int &pos){
	TerminalNode *stack = tlist;
	int point,i;

	stack[0]=tlist[0];
	point=pos=1;
	while(pos<terminalNum){
		if(tlist[pos].category&ValMask){	//digit
			if(stack[point-1].category&ValMask)
				return UnmatchableExpression;
			stack[point++]=tlist[pos++];
			continue;
		}
		for(i=point-1;i>=0;i--)
			if(!(stack[i].category&ValMask)) break;

		switch(priority[ stack[i].category ][ tlist[pos].category ]){
													// get priority
			case 0:		//equal
				if(i==point-1) return UnmatchableExpression;	//no constant on the right side of the terminal character
				stack[i]=stack[i+1];
				point--;
				pos++;
				break;
			case -1:	//less
				stack[point++]=tlist[pos++];	//push in stack
				break;
			case 1:		//greater
				if(i==point-1) return UnmatchableExpression;	//no constant on the right side of the terminal character
				switch(stack[i].category){
					case OP_Add:	//addition			
						if( !(stack[i-1].category&ValMask) ){
							stack[i]=stack[i+1];		//positive number
							point--;
							break;
						}
						stack[i-1].val+=stack[i+1].val;
						if(stack[i-1].category!=stack[i+1].category)
							stack[i-1].category=ValFloat;  //get category
						point-=2;
						break;
					case OP_Minus:	//minus
						if( !(stack[i-1].category&ValMask) ){
							stack[i]=stack[i+1];		//negative number
							stack[i].val=-stack[i].val;
							point--;
							break;
						}
						stack[i-1].val-=stack[i+1].val;
						if(stack[i-1].category!=stack[i+1].category)
							stack[i-1].category=ValFloat;  //get category
						point-=2;
						break;
					case OP_Mul:	//multiplication
						if( !(stack[i-1].category&ValMask) )	return UnmatchableExpression;
						stack[i-1].val*=stack[i+1].val;
						if(stack[i-1].category!=stack[i+1].category)
							stack[i-1].category=ValFloat;
						point-=2;
						break;
					case OP_Div:	//division
						if( !(stack[i-1].category&ValMask) )	return UnmatchableExpression;
						stack[i-1].val/=stack[i+1].val;
						if(stack[i-1].category!=stack[i+1].category)
							stack[i-1].category=ValFloat;
						point-=2;
						break;
					case OP_Equals:	//==
						if( !(stack[i-1].category&ValMask) )	return UnmatchableExpression;
						stack[i-1].val=(stack[i-1].val==stack[i+1].val);
						stack[i-1].category=ValLong;
						point-=2;
						break;
					case OP_Not:	// !
						stack[i]=stack[i+1];
						stack[i].val=!stack[i].val;
						point--;
						break;
				}
				break;
			case 2:		//no relationship
				return UnmatchableExpression;
		}

	}
	if(pos==0) return UnmatchableExpression;
	return ProcessSuccessful;
}
/////////////////////////////////////////////////////////////////

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美草草影院在线视频| 国产精品免费视频网站| 欧美日韩不卡一区| 99精品久久99久久久久| 成人黄色大片在线观看| 成人妖精视频yjsp地址| 国产一区二区三区香蕉| 九九热在线视频观看这里只有精品| 日韩电影在线一区二区| 亚洲高清免费视频| 视频一区中文字幕| 蜜桃视频在线一区| 黄色成人免费在线| 国产精品中文有码| 风间由美一区二区av101 | 成人免费av资源| 成人小视频免费观看| a在线播放不卡| 色综合久久综合中文综合网| 一本大道av伊人久久综合| a4yy欧美一区二区三区| 国产精品资源网| 国产成人在线看| 福利一区二区在线观看| 成人免费av网站| 9久草视频在线视频精品| 成人av网址在线观看| 91亚洲精品久久久蜜桃| 91在线免费看| 欧美人xxxx| 国产丝袜在线精品| 最新国产成人在线观看| 亚洲第一激情av| 久久av中文字幕片| 成人av网站在线观看免费| 欧美婷婷六月丁香综合色| 欧美一区二区三区不卡| 国产日韩在线不卡| 一卡二卡欧美日韩| 另类人妖一区二区av| www.激情成人| 9191久久久久久久久久久| 久久九九全国免费| 一区二区在线观看视频在线观看| 日本午夜一本久久久综合| 国产精品一二三四区| 91麻豆.com| 日韩欧美综合在线| 中文天堂在线一区| 亚洲五码中文字幕| 国产精品主播直播| 欧美色爱综合网| 国产三级一区二区三区| 天天亚洲美女在线视频| 成人一级片在线观看| 欧美视频一区二区三区在线观看| 精品国产青草久久久久福利| 亚洲精品国产视频| 国产在线观看一区二区| 欧美无砖砖区免费| 中文字幕日韩一区| 久88久久88久久久| 欧美日韩视频在线一区二区| 国产欧美日韩不卡免费| 日韩精品91亚洲二区在线观看| jizz一区二区| 精品久久人人做人人爽| 亚洲第一成人在线| 波多野结衣亚洲| 欧美精品一区二区三区四区| 亚洲电影中文字幕在线观看| 成人午夜激情片| 精品免费一区二区三区| 亚洲主播在线播放| 懂色av噜噜一区二区三区av| 欧美一区二区成人| 综合自拍亚洲综合图不卡区| 蜜臀久久久久久久| www国产精品av| 一级特黄大欧美久久久| 欧美大片在线观看一区| 欧美久久婷婷综合色| 中文字幕一区二区三区四区| 欧美人妖巨大在线| 亚洲一区二区三区中文字幕在线| 国产传媒一区在线| 日韩欧美www| 亚洲图片有声小说| 99久久精品国产观看| 久久久欧美精品sm网站| 久久国产精品一区二区| 欧美一区二区三区小说| 婷婷丁香久久五月婷婷| 欧美视频一区二区三区四区 | 久久99国产精品成人| 欧美丰满美乳xxx高潮www| 一区二区三区四区乱视频| 99热在这里有精品免费| 中文文精品字幕一区二区| 国产高清一区日本| 国产片一区二区三区| 国产一区二区三区久久久| 精品欧美一区二区久久| 久久99蜜桃精品| 精品国产1区二区| 国产一区二区三区最好精华液| 欧美va亚洲va| 国产激情视频一区二区三区欧美| 久久久亚洲欧洲日产国码αv| 国内精品视频666| 久久综合一区二区| 国产精品亚洲第一区在线暖暖韩国| 久久综合视频网| 国产91丝袜在线播放九色| 亚洲国产高清aⅴ视频| 成人av在线一区二区| 一区二区三区国产豹纹内裤在线| 一本久道久久综合中文字幕| 一区二区三区在线观看视频| 欧美三级日本三级少妇99| 亚洲狠狠爱一区二区三区| 欧美一区二区三区视频免费播放 | 国产69精品久久久久毛片| 日韩欧美国产综合一区| 日本欧美一区二区在线观看| 日本电影亚洲天堂一区| 夜夜揉揉日日人人青青一国产精品| 91麻豆精品在线观看| 中文字幕在线观看不卡视频| www.亚洲国产| 亚洲男同1069视频| 欧美日韩在线直播| 欧美卡1卡2卡| 另类小说欧美激情| 国产精品网站导航| 色婷婷亚洲综合| 伊人开心综合网| 欧美日韩大陆在线| 日本人妖一区二区| 日韩精品中午字幕| 国产成人久久精品77777最新版本| 精品国产伦一区二区三区免费| 韩国av一区二区三区在线观看 | 国产精品污污网站在线观看| 国产风韵犹存在线视精品| 中文字幕一区二区三区四区| 91色九色蝌蚪| 午夜视黄欧洲亚洲| 日韩一区二区三区免费观看| 老司机午夜精品| 国产视频一区在线观看| 日本不卡一区二区三区| 日韩午夜在线播放| 国产成人免费xxxxxxxx| 成人免费在线观看入口| 欧美午夜免费电影| 国产 欧美在线| 亚洲人成网站在线| 91精品婷婷国产综合久久性色| 国产成人午夜视频| 亚洲色图色小说| 欧美一区二区三区四区五区| 91热门视频在线观看| 偷拍一区二区三区| 久久久亚洲精品一区二区三区| 99久久综合色| 热久久一区二区| 国产精品伦一区| 精品国产一区二区三区久久久蜜月| 色婷婷久久综合| 国产精品一区在线| 日韩精品视频网站| 亚洲欧美精品午睡沙发| 久久美女艺术照精彩视频福利播放| 欧美午夜片在线看| 一道本成人在线| 国产一区不卡在线| 奇米影视在线99精品| 一二三四社区欧美黄| 国产精品久久久久久久久免费丝袜| 欧美一区二区三区公司| 欧美伊人久久久久久久久影院| 成人av网站免费观看| 国产精品一区久久久久| 日韩在线播放一区二区| 97精品视频在线观看自产线路二 | 欧美一区二区播放| 欧美怡红院视频| 91一区二区在线| 成人久久18免费网站麻豆| 久久97超碰色| 毛片av中文字幕一区二区| 亚洲网友自拍偷拍| 夜夜爽夜夜爽精品视频| 亚洲男女一区二区三区| 国产精品美日韩| 欧美高清一级片在线观看| 日韩精品一区二区三区在线播放| 欧美久久久久久久久中文字幕| 欧美在线播放高清精品|