所以我有一些代码可以解析运算符之间的数学表达式。例如,数学表达式
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_0
,expr_1
,expr_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