如何使这个紧凑,高效和可读?

时间:2015-05-31 21:56:28

标签: c algorithm parsing

所以我有一些代码可以解析运算符之间的数学表达式。例如,数学表达式

x^2+5.09*x+(123.1+x)

看起来像

[expr_0][op_1][expr_1][op_2][expr_2][op_3][expr_3]

其中

expr_0 = 'x'
op_1 = '^'
expr_1 = '2'
op_2 = '+'
expr_2 = '5.09'
op_3 = '*'
expr_3 = 'x'
op_4 = '+'
expr_4 = '123.1+x'

在我的算法中,数学函数字符串中的当前字符应该是表达式的开头(expr_0expr_1expr_2或{{我需要将该表达式放在一个字符串中,并将指向当前字符的指针前进到表达式之外的一个字符。表达式可以是expr_3,数字(例如' 'x')或括号中的表达式。

我上面段落中描述的功能如下所示

5.09'

这是完全混乱,可能是错误的。是否有更紧凑的程序将数字输入字符串node * getNextExpression ( char ** begptr ) { // begptr: pointer to the character at the beginning of the expression node * result; if (**begptr == 'x') // next expression is the variable 'x' { result = malloc(sizeof(node)); result->fx = "x"; result->gx = NULL; result->op = NULL; result->hx = NULL; } else if ((**begptr >= '0' && **begptr <= '9') || **begptr== '.') // next expression is a number { int foundPeriod = 0; char * cpy = *begptr; do { if (**begptr == '.') { if (foundPeriod == 0) foundPeriod = 1; else break; } ++*begptr; } while ((**begptr >= '0' && **begptr <= '9') || **begptr == '.'); long n = *begptr - cpy; char * numstr = malloc(sizeof(char) * (n + 1)); numstr[n] = '\0'; for (long k = 0; k < n; ++k) numstr[k] = *cpy++; result->fx = numstr; result->gx = NULL; result->op = NULL; result->hx = NULL; } else if (**begptr == '(') // next expression is enclosed in parantheses { // .... haven't got this down yet } else { result = NULL; } return result; } ,同时推进指针numstr

供参考,*begptr

node

0 个答案:

没有答案