atof

简单的解析double字符串:

考虑的情况:

  1. 符号位
  2. 空格
  3. 异常输入(未考虑)
  4. 科学计数法(e,E)(未考虑)
#include <iostream>
#include <cmath>

using namespace std;

double atof_my(char* pStr){

	//跳过空格
	while(isspace(*pStr))
		++pStr;

	//处理符号位
	int sign = 1;
	if(*pStr == '-'){
		sign = -1;
		++pStr;
	}
	else if(*pStr == '+')
		++pStr;

	//转换整数部分
	double integer_part = 0.0;
	while(isdigit(*pStr)){
		integer_part = integer_part * 10 + *pStr - '0';
		++pStr;
	}
	if(*pStr == '.')
		++pStr;

	//转换小数部分
	double decimal_part = 0.0;
	int decimal_digit = 1;
	while(isdigit(*pStr)){
		decimal_part = decimal_part + (*pStr - '0')/pow(10, decimal_digit++);
		++pStr;
	}

	double res = integer_part + decimal_part;

	return sign * res;
}

int main(){
	char* s1 = "3.14";
	char* s2 = "-3.14";
	char* s3 = "+3.14";
	char* s4 = "    3.14";
	cout<<atof_my(s1)<<endl;
	cout<<atof_my(s2)<<endl;
	cout<<atof_my(s3)<<endl;
	cout<<atof_my(s4)<<endl;

	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值