设为首页 加入收藏

TOP

浮点数字符串转换成浮点数实现(一)
2014-11-23 23:33:47 来源: 作者: 【 】 浏览:2
Tags:点数 字符串 换成 实现

之前面试的时候,常给面试者出的一个面试题目是,给定一个字符串,输出该字符串表示的浮点数的值,要求如下:

写一个转换函数,该函数的输入是一个表示浮点数的字符串,把该字符串转换成浮点数并输出。条件:请考虑各种情况,并且代码中的循环尽量少,不能调用API或者crt库中的函数。例如:输入字符串"345.7",则输出浮点数345.7。接口可以为:float StrToFloatA(TCHAR* pstrfloat);

没想到完全做对这个题目的人居然不多(上机笔试,函数写好之后丢到测试机里面跑一下看是否完全正确),因此自己在空闲时间实现了一下,确实还是有一点难度的。代码如下:

/* -------------------------------------------------------------------------

// 文件名 : StringToFloat.h

// 创建者 : magictong

// 创建时间 : 2011-9-6 14:14:25

// 功能描述 :

//

// $Id: $

// -----------------------------------------------------------------------*/

#ifndef __STRINGTOFLOAT_H__

#define __STRINGTOFLOAT_H__

// -------------------------------------------------------------------------

float StrToFloatW(wchar_t* pstrfloat);

float StrToFloatA(char* pstrfloat);

#if defined(UNICODE) || defined(_UNICODE)

#define StrToFloat StrToFloatW

#else

#define StrToFloat StrToFloatA

#endif // !UNICODE

// -------------------------------------------------------------------------

// $Log: $

#endif /* __STRINGTOFLOAT_H__ */

/* -------------------------------------------------------------------------

// 文件名 : StringToFloat.cpp

// 创建者 : magictong

// 创建时间 : 2011-9-6 14:14:02

// 功能描述 :

//

// $Id: $

// -----------------------------------------------------------------------*/

#include "stdafx.h"

#include "StringToFloat.h"

// -------------------------------------------------------------------------

#pragma warning(disable:4244)

// -------------------------------------------------------------------------

// 函数 : StrToFloatA

// 功能 : 将一个字符串转换为浮点数

// 返回值 : float

// 参数 : char* pstrfloat

// 附注 :

// -------------------------------------------------------------------------

float StrToFloatA(char* pstrfloat)

{

// check

if (!pstrfloat)

{

return 0.0;

}

bool bNegative = false;

bool bDec = false;

char* pSor = 0;

char chByte = '0';

float fInteger = 0.0;

float fDecimal = 0.0;

float fDecPower = 0.1f;

// 进行首位判断,判断是否是负数

if (pstrfloat[0] == '-')

{

bNegative = true;

pSor = pstrfloat + 1;

}

else

{

bNegative = false;

pSor = pstrfloat;

}

while (*pSor != '\0')

{

chByte = *pSor;

if (bDec)

{

// 小数

if (chByte >= '0' && chByte <= '9')

{

fDecimal += (chByte - '0') * fDecPower;

fDecPower = fDecPower * 0.1;

}

else

{

return (bNegative -(fInteger + fDecimal): fInteger + fDecimal);

}

}

else

{

// 整数

if (chByte >= '0' && chByte <= '9')

{

fInteger = fInteger * 10.0 + chByte - '0';

}

else if (chByte == '.')

{

bDec = true;

}

else

{

return (bNegative -fInteger : fInteger);

}

}

pSor++;

}

return (bNegative -(fInteger + fDecimal): fInteger + fDecimal);

}

// -------------

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇从C语言实战谈编程:hello world .. 下一篇C语言常见问题

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: