C语言实现atoi和atof函数

原创 2013年12月04日 20:25:38


#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
#include <ctype.h>
#include <math.h>

int ato_i(char *p) {
    assert(p);
    int k = 0;
    int sign = 1;
    while (*p) {
        if (isdigit(*p)) {
            k = k * 10 + *p - '0';
        } else if (k == 0) {
            if (*p == '-' && sign == 1) {
                sign = sign * (-1);
            }
            p++;
            continue;
        } else break;

        p++;
    }

    return k * sign;
}

double ato_f(char *p) {
    double val, power;
    int sign, i;
    for (;isspace(*p) && *p != '\0'; p++) ;
    sign = (*p == '-') ? -1 : 1;
    if (*p == '-' && *p == '+') p++;
    for (val = 0.0; isdigit(*p) && *p != '\0'; p++) {
        val = 10 * val + *p - '0';
    } 

    if (*p == '.') p++;

    for (power = 1.0; isdigit(*p) && *p != '\0'; p++) {
        val = 10 * val + *p - '0';
        power *= 10;
    }

    return sign * val / power;
}

double ato_fe(char *p) {
    double val, val2, power;
    int sign, sign2, i;
    for (;isspace(*p) && *p != '\0'; p++) ;
    sign = (*p == '-') ? -1 : 1;
    if (*p == '-' && *p == '+') p++;
    for (val = 0.0; isdigit(*p) && *p != '\0'; p++) {
        val = 10 * val + *p - '0';
    } 

    if (*p == '.') p++;

    for (power = 1.0; isdigit(*p) && *p != '\0'; p++) {
        val = 10 * val + *p - '0';
        power *= 10;
    }

    if (tolower(*p) == 'e') p++;
    sign2 = (*p++ == '-') ? -1 : 1;
    for (val2 = 0.0; isdigit(*p) && *p != '\0'; p++) {
        val2 = 10 * val2 + *p - '0';
    }

    if (sign2 == -1)
        return sign * val / power / pow(10, val2);
    else 
        return sign * val * pow(10, val2) / power;
}

long ato_l(char *p) {

}

int main(int argc, char **argv) {
    char *p = "123";
    char *p1 = "-123";
    char *p2 = "12a3";
    char *p3 = "  123";
    printf("p is %s, and ato_i(p) = %d \n", p, ato_i(p));
    printf("p1 is %s, and ato_i(p1) = %d \n", p1, ato_i(p1));
    printf("p2 is %s, and ato_i(p2) = %d \n", p1, ato_i(p2));
    printf("p3 is %s, and ato_i(p3) = %d \n", p1, ato_i(p3));

    char *s = "123.45";
    char *s2 = "123.45e-2";
    double d = ato_f(s);
    double d2 = ato_fe(s2);

    printf("ato_f = %f \n", ato_f(s));
    printf("ato_fe = %f \n", ato_fe(s2));
    return 0;
}


结果输出:

p is 123, and ato_i(p) = 123 
p1 is -123, and ato_i(p1) = -123 
p2 is -123, and ato_i(p2) = 12 
p3 is -123, and ato_i(p3) = 123 
ato_f = 123.450000 
ato_fe = 1.234500 


版权声明:本文为博主原创文章,未经博主允许不得转载。

C语言实现atoi,itoa和atof

首先是atoi的实现,它的功能是将字符串转化为整数。 #include #include /* atoi : convert s to integer; version 2*/ int ...
  • li_canhui
  • li_canhui
  • 2011年09月25日 21:12
  • 3561

C语言中的atoi函数的实现

C语言中有很多的库函数,其实平时没事的时候多去实现一下里面的库函数还是很有用的,下面就来讲一讲C语言中的atoi函数,这个函数的主要功能是将一个字符串转化为一个数字,可能第一眼看上去,你会觉得这是一个...
  • Loving_Forever_
  • Loving_Forever_
  • 2016年04月30日 11:00
  • 5231

C语言atoi、atof、atol、atrtod,strtol和strtoul的汇总

相关函数 atof,atol,atrtod,strtol,strtoul 表头文件 #include
  • gdut2015go
  • gdut2015go
  • 2015年06月02日 09:43
  • 4054

C语言 atof()的实现

atof()的实现,实现了与c自带函数的相同效果
  • wutao1530663
  • wutao1530663
  • 2017年01月12日 20:09
  • 293

【C语言】编写函数实现库函数atof

//编写函数实现库函数atof #include #include #include #include double calculate(const char *src, int flag) ...
  • doudouwa1234
  • doudouwa1234
  • 2015年07月05日 10:47
  • 1121

学习笔记——atoi函数的用法及用C语言实现atoi

库函数atoi的用法及不调用库函数,用C语言实现atoi。
  • xucongjiang
  • xucongjiang
  • 2010年10月17日 20:05
  • 9835

C语言atof()函数:将字符串转换为double(双精度浮点数)

函数 atof() 用于将字符串转换为双精度浮点数(double),其原型为: double atof (const char* str); atof() 的名字来源于 ascii to float...
  • anhuibozhoushatu
  • anhuibozhoushatu
  • 2016年08月24日 20:02
  • 661

C语言中atof函数功能及用法

函数名: atof 功  能: 把字符串转换成浮点数 用  法: double atof(const char *nptr); 程序例: #include #include int main(vo...
  • xuefu2008
  • xuefu2008
  • 2009年10月09日 15:42
  • 9896

【c语言】模拟实现库函数的atof函数

// 模拟实现库函数的atof函数 #include #include #include #include double my_atof(char const *p) { double...
  • zhaoyaqian552
  • zhaoyaqian552
  • 2015年07月04日 16:09
  • 731

atof(),atoi(),itoa(),sprintf()等用法总结

这几个都是C语言中原有的字符格式转换函数,包含在头文件或中,C++自然而然地也把它们加进来了。一、 atof()头文件#include/include原型:double atof(const char...
  • cxh342968816
  • cxh342968816
  • 2011年07月23日 12:35
  • 12929
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C语言实现atoi和atof函数
举报原因:
原因补充:

(最多只允许输入30个字)