php 四则运算Word下载.docx
- 文档编号:18223191
- 上传时间:2022-12-14
- 格式:DOCX
- 页数:15
- 大小:116.14KB
php 四则运算Word下载.docx
《php 四则运算Word下载.docx》由会员分享,可在线阅读,更多相关《php 四则运算Word下载.docx(15页珍藏版)》请在冰豆网上搜索。
//将字符串转换为运算数组
$char=exp_str($str);
//数字栈
$stack1=array();
//符号栈
$stack2=array();
//验证运算符号是否有重复的
$m=0;
/*
//验证运算符"
("
,"
)"
是否匹配
$c_arr=@array_count_values($char);
if($c_arr['
('
]!
=$c_arr['
)'
]){
die("
运算符'
或者'
,匹配错误!
"
);
}*/
//循环
for($i=0;
$i<
count($char);
$i++){
if($char[$i]==0||!
empty($char[$i])){
switch($char[$i]){
case'
:
if($char[$i-1]=='
array_push($stack1,0);
}
if($m==0&
&
$char[$i-1]!
='
){
die("
字符串:
.$str."
error===第"
.$i."
个字符\"
.$char[$i]."
\"
出现错误"
$m=0;
if($stack2[count($stack2)-1]=='
$v2=array_pop($stack1);
$v1=array_pop($stack1);
$op=array_pop($stack2);
$re_num=operate($v1,$op,$v2);
array_push($stack1,$re_num);
array_push($stack2,$char[$i]);
}elseif($stack2[count($stack2)-1]=='
*'
/'
}else{
break;
if($m==0){
}
array_push($stack2,$char[$i]);
if(empty($stack2[count($stack2)-1])){
foreach($stack2as$row){
if($row=='
$mn=1;
break;
}else{
$mn=0;
}
}
if($mn==0){
die("
array_pop($stack2);
while(($op=array_pop($stack2))!
$n2=array_pop($stack1);
$n1=array_pop($stack1);
$re_num=operate($n1,$op,$n2);
if(!
empty($stack2)){
array_push($stack1,$re_num);
default:
array_push($stack1,$char[$i]);
if($char[$i+1]=='
||$char[$i-1]=='
$m=1;
}
}
while(($op=array_pop($stack2))!
'
$v2=array_pop($stack1);
$v1=array_pop($stack1);
$re_num=operate($v1,$op,$v2);
array_push($stack1,$re_num);
echo"
hr/>
.$str.'
='
.$stack1[0];
*运算操作函数
functionoperate($v1,$ch,$v2){
switch($ch){
case'
return$v1+$v2;
break;
return$v1-$v2;
return$v1*$v2;
if($v2==0){
die("
除数不能为零!
}
return$v1/$v2;
*过滤字符串
*returntrue不含特殊字符
*false含有特殊字符
functionfilter_str($str){
$pattern="
/[0-9|+|\-|\*|\/|\(|\)|\.|\s]+$/"
$re=preg_match($pattern,$str,$aa);
if(!
empty($re)){
returntrue;
}else{
returnfalse;
*分割字符串,将数字,符号分隔开
functionexp_str($str){
//存入运算字符
$char=array();
//去除多余的空格
$str=preg_replace('
/[\s|\t]/'
'
$str);
for($i=0;
strlen($str);
$sliceStr=$str[$i];
//验证是否存在特殊字符
$re=filter_str($sliceStr);
if(!
$re){
echo"
error===第"
个字符,是特殊字符"
die();
if($sliceStr=='
$char[]=array('
num'
=>
$i,'
ch'
$char[]=array('
strlen($str),'
$all_arr=push_char($char,$str);
return$all_arr;
*将数值,放入数组中
functionpush_char($pattern,$str){
$arr=array();
$flag=0;
$m=0;
foreach($patternas$value){
if($m==0){
if($value['
]==0){
$arr[]=$value['
];
$flag=$value['
}else{
$arr[]=substr($str,$flag,$value['
]);
}else{
$start=$flag+1;
$diff=$value['
]-$flag-1;
$sub=substr($str,$start,$diff);
if($sub==0||!
empty($sub)){
$arr[]=$sub;
if(!
empty($value['
])){
$flag=$value['
$m++;
//去除空格
foreach($arras$value){
if($value!
$re_arr[]=$value;
return$re_arr;
>
一、分割字符串,将数字、符号等分隔开,并存入数组
例如:
字符串:
12+34+(45*89)-20转化为array(12,’+’,34,’+’,’(’,45,’*’,89,’)’,’-’,20);
目的:
这样可以将字符串的数字和字符运算符分隔开,有利于计算。
支持运算(-1)+34*12+6/3
支持小数
二、验证运算符中“(”的数量,及“)”的数量,如果不匹配则报错。
三、根据运算规则进行数值运算。
(先算乘除,后算加减,如果有括号先算括号里面的)
1、设置两个栈,一个栈存数据(左侧),另一个栈存运算符(右侧)。
2、运算中,禁止出现两个操作运算符,同时出现的情况,如出现则报错,不再往下执行。
3、运算中,过滤掉空格
4、检查是否存在特殊字符
通过正则表达式,验证字符串是否存在不合法的字符。
允许的字符有0-9,+,-,*,/,(,),空格;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- php 四则运算