转换和计算char *表达式

时间:2015-07-09 20:55:19

标签: c string char

我有以下函数,它接收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

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
相关问题