解题方案 :
var calculate = function(s) {
let str = s.replace(/\s/g,""); //去掉字符串中的空格,方便处理
let total = 0;
let newArr = [];
let string = '';
for(let i=0;i<str.length;i++){ // 处理字符串,把符号和数字分开形成数组
if(str[i]!='+'&&str[i]!='-'&&str[i]!='*'&&str[i]!='/'){
string=string+str[i];
}else{
newArr.push(string);
newArr.push(str[i]);
string = '';
}
}
newArr.push(string)
var arr = [];
arr.push(parseInt(newArr[0]));
// 利用数组存储所有数据,将所有计算的操作都转换成加法
for(let j=1;j<newArr.length;){
if(newArr[j]=='+'){
arr.push(parseInt(newArr[j+1]))
j=j+2;
}else if(newArr[j]=='-'){
arr.push(parseInt(-newArr[j+1]))
j=j+2;
}else if(newArr[j]=='*'){
arr.push(arr.pop()*parseInt(newArr[j+1]))
j=j+2;
}else if(newArr[j]=='/'){
arr.push(parseInt(arr.pop()/parseInt(newArr[j+1])))
j=j+2;
}
}
for(let z=0;z<arr.length;z++){
total += arr[z]
}
return total
};
解题思路:
1、先处理原字符串根据符号进行分割:如"32+2*2"变为[ ’ 32 ’ , ’ + ’ , ’ 2 ’ , ’ * ’ , ’ 2 ’ ];
2、将所有计算操作都转为加法操作,符号为 ‘+’ 时,直接存储,符号为 ‘-’ 时,存储相反数,符号为 ‘ * ’或者 ‘ / ’时,将存储的最后一个值替换为计算结果,最后将所有值相加即可;