本题来源于腾讯2014年暑期实习生招聘附加题1,实现的代码如下。
//字符串转double,考虑科学计数法表示
bool ParseNumber(const char* s,double* d)
{
bool bNegtiveBase,bNegtiveExp;//分别表示基数和指数是否为负
int nPreZero = 0;//基数前缀0的个数
const char* p;
int sum_i = 0;
double sum_f = 0.0;
int sum_exp = 0;
double sum = 0.0;
bNegtiveBase = bNegtiveExp = false;
if(!s)
return false;
if('-' == *s)
{
bNegtiveBase = true;
s++;
}
for(;'0' == *s;nPreZero++,s++);//统计基数前缀0的个数
for(;*s != '.' && *s != 'e' && *s != 'E' && *s !