php计算器使用方法,php--计算器的算法实现(-)
$exp='3*9*9';
echo $exp.'=';
$numStack=new MyStack();
$opeStack=new MyStack();
$index=0;
while(true){
$ch=substr($exp,$index,1);
//判斷是否是字符
if($opeStack->isOper($ch)){
//是運算符
/**
3.如果發現是運算符
3.1 如果符號棧為空,就直接入符號棧
3.2. 如何符號棧,不為空,就判斷
如果當前運算符的優先級小于等于符號棧頂的這個運算符的優先級,就計算,并把計算結果入數棧.然后把當前符號入棧
3.3 如何符號棧,不為空,就判斷
如果當前運算符的優先級大于符號棧頂的這個運算符的優先級,就入棧.
*/
//如何符號棧,不為空,
if($opeStack->isEmpty()==true){
$opeStack->push($ch);
}else{
//符號棧不為空
//如果當前運算符的優先級小于等于符號棧頂的這個運算符的優先級,就計算
$chPRI=$opeStack->PRI($ch);
$stackPRI=$opeStack->PRI($opeStack->getTop());
if($chPRI<=$stackPRI){
$num1=$numStack->pop();
$num2=$numStack->pop();
$ope=$opeStack->getTop();
$res=$opeStack->getResult($num1,$num2,$ope);
$numStack->push($res);
// $opeStack->push($ch);
}else{
$opeStack->push($ch);
}
}//if結束
}else{
$numStack->push($ch);
}
++$index;
if($index==strlen($exp)){
break;
}
}
while(!$opeStack->isEmpty()){
$num1=$numStack->pop();
$num2=$numStack->pop();
$ope=$opeStack->pop();
$res=$opeStack->getResult($num1,$num2,$ope);
$numStack->push($res);
}
echo $numStack->getTop();
class MyStack{
private $top=-1; //模擬棧底,指向-1
private $maxSize=15; //模擬棧的容量為5
private $stack=array();//用來數組來模擬,想數組內填入棧的內容
//判斷是否是運算符
public function isOper($ch){
if($ch=='+'||$ch=='-'||$ch=='*'||$ch=='/'){
return true;
}else{
return false;
}
}
//判斷棧是否為空
public function isEmpty(){
if($this->top==-1){
return TRUE;
}else{
return FALSE;
}
}
//判斷符號的優先級
public function PRI($ch){
if($ch=='*'||$ch=='/'){
return 1;
}else if($ch=='+'||$ch=='-'){
return 0;
}
}
//獲得棧頂的值
public function getTop(){
return $this->stack[$this->top];
}
//計算數值
public function getResult($num1,$num2,$ope){
$res=0;
switch($ope){
case '+':
$res=$num1+$num2;
break;
case '-':
$res=$num2-$num1;
break;
case '*':
$res=$num1*$num2;
break;
case '/':
$res=$num2/$num1;
break;
//erqiqu huibohuayuan 155171111 86
}
return $res;
}
//入棧操作
public function push($val){
///先判斷棧是否已滿
if($this->top==$this->maxSize-1){
echo '棧滿,不能添加';
return; //棧滿 返回
}
//先top上移,然后填充棧內容
$this->top++;
$this->stack[$this->top]=$val;
}
//出棧
public function pop(){
if($this->top==-1){
echo '棧111空';
return; //空棧,無數據,返回
}
//取出棧頂的數據,同時把該數據返回,別忘了把top指針下移
$topValue=$this->stack[$this->top];
$this->top--;
return $topValue;
}
//顯示棧的所有信息
public function showStack(){
if($this->top==-1){
echo '棧空!';
return;//空棧,無數據,返回
}
//結合堆棧的數據結構,是后進先出類型的,因此從棧頂開始,依次往下讀出棧的內容
for($i=$this->top;$i>-1;$i--){
echo 'Stack['.$i.']='.$this->stack[$i].'';
}
}
}
?>
總結
以上是生活随笔為你收集整理的php计算器使用方法,php--计算器的算法实现(-)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c 内嵌php 韩天峰,PHP-X系列教
- 下一篇: php curl cookiejar,p