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

字符串常用的转换函数atof、atoi、atol等

其主要作用为将字符串转换成浮点型、整型、长整型、double型

应用举例

#include<stdlib.h>
#include<stdio.h>
int main()
{
    char *a="123456";
    char *b="123.456";
    char *c="-123456e-3";
    char *d="df1.2eddf";

    printf("a=%d\n",atoi(a));
    printf("b=%f\n",atof(b));
    printf("c=%f\n",atof(c));
    printf("d=%f\n",atof(d));
}
执行结果:



对atof进行实现

函数声明:double myatof(const char *str);

函数功能:对字符串str进行扫描,开头跳过空格符,识别并返回出浮点数(格式为±xxx.xxx或者±xx.xxexxx)

                  当遇到不是有效字符(数字和字符'.'、'e'、'E')时返回已转换的数(详细请见atof百度百科    

#include<stdlib.h>
#include<stdio.h>
double myatof(const char *str);
int main()
{
    char *a="   123456e-2";
    char *b="123.456";
    char *c="-123.456e-3";
    char *d="1.2ed123";

    printf("a=%f\n",myatof(a));
    printf("b=%f\n",myatof(b));
    printf("c=%f\n",myatof(c));
    printf("d=%f\n",myatof(d));
}

double myatof(const char *str)
{
    int negative=0;     //标记正负号,数为负时置为1
    double num=0;       //数值
    double index=0;     //记录科学计数法中10的指数

    while(*str==' ')    //吸收空格
        str++;

    if(*str=='-')       //识别正负数
    {
        negative=1;
        str++;
    }
    else if(*str=='+')
        str++;

    while(str[0]!='\0')             //获取整数部分
    {
        if(*str=='.')               //遇到小数点时跳出
            break;
        if(*str=='e'||*str=='E')    //如果包含科学计数法时跳出
            break;
        if(*str<'0'||*str>'9')      //遇到非有效字符时返回字符串已转换的数值
            return num;
        num=num*10+(*str-'0');
        str++;
    }

    if(*str=='.')                           //获取小数部分
    {
        str++;
        int i=10;
        while(*str!='\0')
        {
            if(*str=='e'||*str=='E')        //如果包含科学计数法时跳出
                break;
            if(*str<'0'||*str>'9')          //遇到非有效字符时返回字符串已转换的数值
                return num;
            num=num+((float)(*str-'0'))/i;
            i=i*10;
            str++;
        }
        if(*str=='e'||*str=='E')
        {
            str++;
            index=myatof(str);              //调用自身获取科学计数法中10的指数
        }
    }
    else if(*str=='e'||*str=='E')
    {
        str++;
        index=myatof(str);
    }

    if(index>0)                            //计算最终值
        for(int i=0;i<index;i++)
            num=num*10;
    if(index<0)
        for(int i=0;i>index;i--)
            num=num/10;
    if(negative==1)
        num=-num;
    return num;
}

执行结果:


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值