关于数字的获取,首先要知道数字可以以什么形式存在:
引入状态变迁图:
由此,数值的获取就有了基本眉目,根据不同的状态作出不同的应对
对于数据存放,采取分部 用结构体
typedef struct {
int index; //字符串所读取到的位置
boolean ok; //是否正确
boolean finished; //是否结束
int status; //当前状态
double value; //值
double dec; //小数部分值
int sign; //正负
}NUMBER_ARG;
再处理状态前,先进行细节处理
①遇符号:改变arg.sign正负
arg->sign = ('-' == ch ? -1 : 1);
②遇小数点:初始化arg.dec为0.1,方便小数操作
arg->dec = 0.1;
③小数:先写出来当前的小数位的数加到arg.value,再将arg.dec向后推一位
arg->value += arg->dec * (ch - '0');
arg->dec /= 10.0;
④整数:当前value往前移一位,将数存加个位上
arg->value = arg->value * 10 + (ch - '0');
数据处理解决完成后,就是根据不同的状态,作出不同的操作,除了合理的状态后的链接,其他都是错误
但是结束状态是个特别,将不用额外写函数,直接赋值value * 正负即可
这个取数值因为返回值是ok(是否出错),所以值和字符串长度的获取需要传参获取。