Hei Coders,
我有一个字符串“ 1 + 1”,使用javascript内置函数eval()我可以执行eval(“ 1 + 1”),所以返回值为2
但是如果我想在javascript中将这个概念实现为递归函数呢?
function evaluate(str) {
}
evaluate("1+1");
evaluate("1-1");
evaluate("1*1");
evaluate("1/1");
我尝试过的是
function evaluate(str) {
if (str.length === 0) {
return "";
}else{
let angka;
let symbol;
for (let i = 0; i < str.length; i++) {
if (isNaN(str[i])) {
symbol = str[i];
break;
}else{
angka = str[i];
}
}
switch (symbol) {
case "+":
return angka + evaluate(str.slice(1));
case "-":
return angka - evaluate(str.slice(1));
case "/":
return angka / evaluate(str.slice(1));
case "*":
return angka * evaluate(str.slice(1));
default:
return parseInt(str[0]) + evaluate(str.slice(1));
}
}
}
function evaluate(str) {
if (str.length === 0) {
return ""
}
let numbers = "";
let operator = "";
let lastIndex = 0;
for (let i = 0; i <= str.length; i++) {
if (!isNaN(parseInt(str[i]))) {
numbers += parseInt(str[i]);
}else{
operator = str[i];
lastIndex = i;
break;
}
}
// console.log(numbers, " " , operator , " " , lastIndex);
lastIndex = lastIndex < 1 ? 1 : lastIndex;
if (operator === "+") {
return numbers + evaluate(str.slice(lastIndex));
}
}
function evaluate(str) {
if (str.length === 0) {
return 1;
}else{
let numbers = "";
for (let i = 0; i <= str.length; i++) {
if(parseInt(str[i]) >= 0){
numbers = numbers + "+" + str[i];
}else{
let lengthNumbers = numbers.length > 1 ? numbers.length : 1;
let tempNumbers = numbers;
numbers = "";
return tempNumbers + evaluate(str.slice(lengthNumbers))
}
}
}
}
============
我是多么不高兴:),目前这是我的答案(根据下面的解决方案,谢谢大家)>
function evaluate(str) { if(str.match(/[*/+-]/)){ let numbers = ""; for (let i = 0; i < str.length; i++) { switch (str[i]) { case "+": return parseInt(numbers) + evaluate(str.slice(numbers.length+1)) case "*": return parseInt(numbers) * evaluate(str.slice(numbers.length+1)) case "/": return parseInt(numbers) / evaluate(str.slice(numbers.length+1)) case "-": return parseInt(numbers) - evaluate(str.slice(numbers.length+1)) default: numbers += str[i]; break; } } }else{ return parseInt(str[0]); } } console.log(evaluate('1+2+3+4+5')) // 15 console.log(evaluate('1*2*3*4*5')) // 120 console.log(evaluate('20/4')) // 5 console.log(evaluate('20-6')) // 14
没有人工作!我知道eval会节省我的时间,但是在这种情况下,我需要解决此问题,谢谢。
Hei Coders,我有一个字符串“ 1 + 1”,使用javascript内置函数eval()我可以执行eval(“ 1 + 1”),所以返回值为2,但是如果我要实现此功能,该怎么办?递归的概念...
尝试此代码
另一种方法是将您的字符串转换成可以作为堆栈进行评估的数组,然后对该堆栈进行简单评估。例如,我们可以将"10 - 20 + 30 * 2 / 10"
变为[10, 20, "-", 30, "+", 2, "*", 10, "/"]
,然后通过将栈顶的两个元素依次替换为当前操作的值来对其求值。
你非常亲密。它需要更复杂一些。