【发布时间】:2015-02-23 17:55:35
【问题描述】:
我正在尝试编写一个忽略数学运算和括号顺序的函数。该函数只是从左到右评估运算符。 (对于+-*/^)
示例 1:5 - 3 * 8^2 返回 256。
示例 2:4 / 2 - 1^2 + (5*3) 返回 18。
这就是我所做的:
function out = calc(num)
[curNum, num] = strtok(num, '+-*/^');
out = str2num(curNum);
while ~isempty(num)
sign = num(1);
[curNum, num] = strtok(num, '+-*/^');
switch sign
case '+'
out = out + str2num(curNum);
case'-'
out = out - str2num(curNum);
case '*'
out = out.*str2num(curNum);
case '/'
out = out./str2num(curNum);
case '^'
out = out.^str2num(curNum);
end
end
end
我的函数不会忽略从左到右的规则。我该如何纠正这个问题?
【问题讨论】:
-
你得到的输出是什么?当您提出问题时,包含此信息很重要。一方面,您不会在现有代码中使用
^运算符拆分字符串。