表达式基础 获取数字

关于数字的获取,首先要知道数字可以以什么形式存在:
引入状态变迁图:
在这里插入图片描述

由此,数值的获取就有了基本眉目,根据不同的状态作出不同的应对
对于数据存放,采取分部 用结构体

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(是否出错),所以值和字符串长度的获取需要传参获取。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魔幻音

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值