为什么不是';我的PHP计算器不工作吗?(字符串函数…)
这个计算器应该在网页文本框中输入带空格的输入(如“2+2”),然后在上面回显答案。目前,输出要么是“0”,要么似乎会从输入中截取一个随机数 我95%确定问题出在substr函数中-它们没有被指定正确的值。这是我的猜测,因为输出行为。为了证明 1+1等于0 2+2等于0 ... 9+9等于0 10+10将=1 20+20将=2 注意:从第16行开始的$firstNumber、$secondNumber和$operator初始声明值是任意的 下面是PHP手册中的substr(,)示例:为什么不是';我的PHP计算器不工作吗?(字符串函数…),php,html,Php,Html,这个计算器应该在网页文本框中输入带空格的输入(如“2+2”),然后在上面回显答案。目前,输出要么是“0”,要么似乎会从输入中截取一个随机数 我95%确定问题出在substr函数中-它们没有被指定正确的值。这是我的猜测,因为输出行为。为了证明 1+1等于0 2+2等于0 ... 9+9等于0 10+10将=1 20+20将=2 注意:从第16行开始的$firstNumber、$secondNumber和$operator初始声明值是任意的 下面是PHP手册中的substr(,)示例: echo
echo substr('abcdef', 1); // bcdef <br>
echo substr('abcdef', 1, 3); // bcd<br>
echo substr('abcdef', 0, 4); // abcd<br>
echo substr('abcdef', 0, 8); // abcdef<br>
echo substr('abcdef', -1, 1); // f<br>
echo substr('abcdef',1);//bcdef
回声子序列('abcdef',1,3);//bcd
回声子序列('abcdef',0,4);//abcd
回声子序列('abcdef',0,8);//abcdef
回波子序列('abcdef',-1,1);//f
。
按下submit时执行//if'
如果(isset($_POST['test']))
{
$input=$_POST['test'];
$answer=计算($input);
回音$答案;
}
//进行字符串处理和数字计算
函数计算($input)
{
//声明(随机)
$firstNumber=20;
$secondNumber=30;
$operator=“+”;
$answer=7;
//字符串处理。
对于($i=0;$i)
您的问题在于使用substr
substr
获取字符串、起始位置和长度。这是您误用的长度。在平移输入字符串时,您正在增加要查找的子字符串的长度。由于运算符的长度为1
,因此您应该使用
//if current position of the string scan is an operator,
if( trim(substr($input, $i, 1), " ") == "+" || trim(substr($input, $i, 1), " ") == "-"
||trim(substr($input, $i, 1), " ") == "*" || trim(substr($input, $i, 1), " ") == "/")
{
....
您还需要在此处更新代码:
//$operator = current position TO current position + 1
$operator = substr($input, $i, 1);
//trim $operator
$operator = trim($operator, " ");
你可以通过这样做来简化这一点
potentialOperator = trim(substr($input, $i, 1), " ")
并将其与支持的运算符进行比较。这将为您节省对trim
和substr
这也意味着你只识别一次操作员
您可能还想使用
preg_split
和preg_split_DELIM_CAPTURE
来解析输入字符串,而不是逐字符扫描输入字符串。WOW!我误用了substr-我不知道第三个参数是长度量。。谢谢!
potentialOperator = trim(substr($input, $i, 1), " ")