|
请保证自己有jass基础和高中数学基础,至于这个东西有什么用,我是不会说的
首先来一个jass函数
[jass]
function GetSubString takes string source, integer index returns string
return SubString(source,index-1,index)
endfunction
[/jass]
一个表达示由运算符和运算量组成,例如:“3+5”3和5示运算量,+号是运算符,运算符需要几个运算量,便叫几元运算符,比如+和-做正号或负号时为一元运算符,做加和减为二元运算符,但为了某些方便.
除了 + - * / 四种运算符
我还自己自定义了几种,%:取余 ,sin:正弦,cos:余弦,tan:正切,++:自增1,--:自减1
他们的运算优先权为:++,--,sin,cos,tan > (+(正号),-(负号))(事实上,本人系统不支持这个优先权) > *,/,% > +(加) , -(减)。我们还需要两个栈结构(你不用知道他是什么),和一个取得运算符优先权的函数。
[jass]
globals
real array Ods
integer Ods_Top = -1
string array Ops
integer Ops_Top = -1
string array Operator
endglobals
function Init_OperatorPower takes nothing returns nothing
set Operator[0] = ""
set Operator[1] = "-"
set Operator[2] = "+"
set Operator[3] = "%"
set Operator[4] = "/"//这个我无法保证能通过编译,可能要写成“//"
set Operator[5] = "sin"
set Operator[6] = "cos"
set Operator[7] = "tan"
set Operator[8] = "++"
set Operator[9] = "--"
set Operator[10] = "//"//这个我无法保证能通过编译,可能要写成“////"
set Operator[11] = "**"
endfunction
//This function requires MapInitialize the run
function GetOperatorPower takes string operator returns integer
local integer i = 0
loop
exitwhen i >= 12
if Operator == operator then
return i
endif
set i = i + 1
endloop
endfunction
[/jass]
经过痛苦的思考,我发现加入了++和--运算符导致写出了算式十分古怪,而且我差点不知道怎么写代码,本来想一次性改掉了,只支持最原始
的,但是人怎么能偷懒了,于是呼,我有加入**和//,这两个是乘方和开方,到底算式有多古怪了,恩,本来是要支持如+++1++++++1++这种算
式的,孩子,你看晕了吧。确实可以写这么多的加,但是我技术有限,只能支持++1+++++1++(不支持正负号)。下面给出算法流程图,这是个
好东西啊!
但是还有个问题需要解决,那就是空格的问题,我们需要一个函数去掉所有的空格,我们需要遍历字符串
,把空格给删掉
[jass]
function DeleteSpace takes string source returns string
local integer long = StringLength(source)
local integer i = 1
local string front
local string beside
loop
exitwhen i > long
if GetSubString(source,i) == " " then
set front = SubStringBJ(source,1,i - 1)
set beside = SubStringBJ(source,i + 1,long)
set source = front + beside
set long = StringLength(source)
set i = i - 2
endif
set i = i + 1
endloop
return source
endfunction
[/jass]
接下来是栈操作,两个数组分别需要两个函数(push和pop)
[jass]
function OdsPush takes real number returns nothing
set Ods_Top = Ods_Top + 1
set Ods[Ods_Top] = number
endfunction
function OdsPop takes nothing returns real
local real temp = Ods[Ods_Top]
set Ods[Ods_Top] = 0
set Ods_Top = Ods_Top - 1
return temp
endfunction
function OpsPush takes string source returns nothing
set Ops_Top = Ops_Top + 1
set Ops[Ops_Top] = source
endfunction
function OpsPop takes nothing returns string
local string temp = Ops[Ops_Top]
set Ops[Ops_Top] = null
set Ops_Top = Ops_Top - 1
return temp
endfunction
[/jass]
过几天再补上来啊,尽管写一半就发上来是不对,不过我不好把这些东西保存啊,在网吧 |
|