当前位置:编程学习 > C/C++ >>

浮点数字符串转换成浮点数实现

 

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

 

        写一个转换函数,该函数的输入是一个表示浮点数的字符串,把该字符串转换成浮点数并输出。条件:请考虑各种情况,并且代码中的循环尽量少,不能调用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 +  fDecima

补充:软件开发 , C语言 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,