数字加减字符串计算问题
2018-06-10 18:01:28 小德 算法 访问次数 736

一个字符串只由'+','-',‘0’-‘9’组成,并且'+','-'只作为二元运算符。

tips: 符号是判断前面的数进行加和的时机。

思路:初始化ret 和 操作符TMP ,操作数TMP,遍历字符串,每当遇到运算符时 TMP操作符  操作数 结果数操作;遇到数字 更新TMP操作数 ;当连续遇到连续操作符时,相同的操作符 则'+',不相同则为'-';避免字符串最后一个数字没有操作 先给字符串追加一个'+';


<?php
$str = '1+2+365+-4---5+1-1';
$str .= '+';
$lenth =  strlen($str);
$i = 0;
$tmp = 0;
$ret = 0;
$operaTmp = '+';

while ($i < $lenth) {
 
    if($str[$i] === '+' || $str[$i] === '-') {
        if( ($i-1 >= 0) && ($str[$i-1] === '+' || $str[$i-1] === '-') ){
            $operaTmp =  $operaTmp === $str[$i] ? '+' : '-';
            $i++;
            continue;
        }
        echo "$operaTmp$tmp";
        if($operaTmp === '+') {
            $ret +=  $tmp;
        }else {
            $ret -=  $tmp;
        }
        $tmp = 0;
        $operaTmp = $str[$i];
    }else {
       if($tmp == 0) {
            $tmp = $str[$i];
       }else {
            $tmp = $tmp * 10 + $str[$i];
       }
    }
    $i++;
}

var_dump($ret);exit;