Eval fonksiyonu kullanmadan Stringteki problemi çözme.('4+7*8-4/2').
<b>Başlıkta herşey açık :D stringteki problemi nasıl çözerim acaba ?P.S JAVASCRİPT</b>
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (1)
yalnız eval tam da bu gibi durumlar için var zaten. eval kullanmak istememenin sebebi nedir?
eval kullanmak istemezsen, aşağıdaki gibi uzun bir fonksiyona ihtiyacın olacak :)
function calculate(input){
var f = { add : '+'
, sub : '-'
, div : '/'
, mlt : '*'
, mod : '%'
, exp : '^' };
f.ooo = [[ [f.mlt] , [f.div] , [f.mod] , [f.exp] ],
[ [f.add] , [f.sub] ]];
input = input.replace(/[^0-9%^*\/()\-+.]/g,'');
var output;
for(var i=0, n=f.ooo.length; i<n; i++ ){
var re = new RegExp('(\\d+\\.?\\d*)([\\'+f.ooo[i].join('\\')+'])(\\d+\\.?\\d*)');
re.lastIndex = 0;
while( re.test(input) ){
output = calc_internal(RegExp.$1,RegExp.$2,RegExp.$3);
if (isNaN(output) || !isFinite(output)) return output;
input = input.replace(re,output);
}
}
return output;
function calc_internal(a,op,b){
a=a*1; b=b*1;
switch(op){
case f.add: return a+b; break;
case f.sub: return a-b; break;
case f.div: return a/b; break;
case f.mlt: return a*b; break;
case f.mod: return a%b; break;
case f.exp: return Math.pow(a,b); break;
default: null;
}
}
}
console.log( calculate('4+7*8-4/2') )