我有以下函数,它接收tree*
和数学表达式char*
:
double calc(char *expr, tree *variaveis){}
我想知道如何运行验证每个角色的表达式?我不能使用strtok()
,因为不会总是有分隔符。
我正在尝试类似的事情:
double calc(char *expr, tree *variaveis){
int i;
dado_t retorno = 0;
double aux;
char c;
for(i=0; i < strlen(expr); i++){
c = expr[i];
if(isdigit(c)){
//Here i need to convert the C value to a double.
}
}
}
另外,我在将字符表示的值转换为double变量时遇到问题。当我调试代码块中的代码并将c
设置为数字2
作为值时,它会显示我:
Variable Value
c 50 '2'
然后,当我做类似的事情时:
double aux = c; or
double aux = (double)c;
我得到的只是50
而不是2
。
答案 0 :(得分:1)
50
这里是'2'
个字符double aux = c - '0';
。因为,数字的所有字符表示都具有连续的值,注意你可以做类似的事情
int
将数字作为aux
值。
FWIW,我不太相信double
类型是C11
。
注:
来自^(?:"?abc\S*\s+)?(?P<x1>\S+)\s+(?P<x2>\S+)\s+(?P<x3>\S+)
,章节§5.2.1
.....在上面的十进制数字列表中,0之后的每个字符的值应该比前一个值大1。 ....
答案 1 :(得分:1)
您需要c - '0'
将字符'2'
转换为数字值2
:
double aux = c - '0';
它的工作原理是因为'0'
到'9'
的字符具有相应的ASCII值:
c == '0'
则'0' - '0' == 0
c == '1'
则'1' - '0' == 1
c == '2'
则'2' - '0' == 2