解析这个C语言函数的运行流程 const char* parse_number(CJSON *node, const char *str) { double n = 0; //最终计算的数字 int sign = 1; //正负号 int w = 0; //小数位数 if (*str == ‘-’) {sign = -1; str++; }//负数 if (*str == ‘0’) { str++; }//前导字符为0 if (*str >= ‘0’ && *str <= ‘9’) {//数字字符 do {n = (n * 10.0) + (*str++ - '0'); } while (*str >= '0' && *str <= '9'); } if (*str == ‘.’ && str[1] >= ‘0’ && str[1] <= ‘9’)//遇到小数点 { str++; do {w--; n = (n * 10.0) + (*str++ - '0'); } while (*str >= '0' && *str <= '9'); } n = sign * n * pow(10, w);//最终数值 node->vDouble = n; node->vInt = (int)n; node->type = cJSON_Number; return str; }
时间: 2024-04-21 13:30:25 浏览: 74
(const) char 转CString 详解(字符串类型转换详解,不断补充)
这个C语言函数的运行流程如下:
1. 定义了一个double类型的变量n,用于存储最终计算的数字。
2. 定义了一个int类型的变量sign,用于存储正负号。
3. 定义了一个int类型的变量w,用于存储小数位数。
4. 判断字符串str的第一个字符是否为负号“-”,若是,则将sign赋值为-1,将str指针后移一位。
5. 判断字符串str的第一个字符是否为数字字符“0”,若是,则将str指针后移一位。
6. 判断字符串str的第一个字符是否为数字字符,若是,则使用do-while循环将数字字符转换为double类型的数字n,并将str指针后移,直到遇到非数字字符为止。
7. 判断字符串str的第一个字符是否为小数点“.”,若是,并且它的下一个字符是数字字符,即遇到小数,将str指针后移一位。
8. 使用do-while循环将小数部分的数字字符转换为double类型的数字n,并将w减一,直到遇到非数字字符为止。
9. 计算最终的数字n,将其赋值给node结构体中的vDouble成员和vInt成员,将node的type成员赋值为cJSON_Number。
10. 返回指向字符串str的指针,该指针指向下一个未处理的字符。
阅读全文