|
发表于 2017-10-10 09:15:18
|
显示全部楼层
递归的方法发一波。
之前一直在用的。
- /**
- * @brief Four arithmetic operation.
- * @param *s: Expression start.
- * @param *e: Expression end
- * @retval ret
- */
- int calc(const char *s, const char *e)
- {
- int layer = 0;
- const char *p;
-
- for (p = e; p >= s; --p) {
- switch (*p) {
- case ')': ++layer; break;
- case '(': --layer; break;
- case '+':
- if (0 == layer) return calc(s, p - 1) + calc(p + 1, e);
- break;
- case '-':
- if (0 == layer) return calc(s, p - 1) - calc(p + 1, e);
- break;
- }
- }
-
- for (p = e; p >= s; --p) {
- switch (*p) {
- case ')': ++layer; break;
- case '(': --layer; break;
- case '*':
- if (0 == layer) return calc(s, p - 1) * calc(p + 1, e);
- break;
-
- case '/':
- if (0 == layer) return calc(s, p - 1) / calc(p + 1, e);
- break;
- }
- }
-
- if ('(' == *s && ')' == *e) return calc(s + 1, e - 1);
- return atoi(s);
- }
复制代码 |
|