自己实现的 atof()函数

基本功能上是实现了,错误处理很烂.

double atof(const char* str)
{
    if (str==0)return 0;
    
    double nRet = 0.0f;
    bool bSign = true;
    bool bFlag = false;
    bool bPoint = false;
    bool bNum = false;
    double nCount = 1.0f;
    
    int nLen = 0;
    nLen = strlen(str);
    if (nLen == 0) return 0;
    
        for (int i=0; i<nLen; ++i)
    {
        if ( str[i] == ' ' && (!bFlag)) continue;
        if ( str[i] >= '0' && str[i] <= '9') 
        { 
            if (bPoint) { nRet += ( str[i] - '0') / pow(10.0f, nCount); ++nCount; }
            else nRet = nRet * 10 + ( str[i] - '0');
            bNum = bFlag = true; 
            continue;
        }
        if ( (str[i] == '.') && (!bPoint) && bNum) { bPoint = true; continue; }
        if ( str[i] == '+' && (!bFlag) ) { bFlag = bSign = true; continue; }
        if ( str[i] == '-' && (!bFlag) ) { bFlag = true; bSign = false; continue; }
        break;
    }
    if (!bSign) nRet = -nRet;
    return nRet;
    
}

时间: 2024-09-27 09:18:41

自己实现的 atof()函数的相关文章

快速atof()函数

/*shamelessly ripped from irrlicht3d engine.*/const float fast_atof_table[] = {     0.f,     0.1f,     0.01f,     0.001f,     0.0001f,     0.00001f,     0.000001f,     0.0000001f,     0.00000001f,     0.000000001f,     0.0000000001f,     0.0000000000

C语言中一些将字符串转换为数字的函数小结_C 语言

C语言atoi()函数:将字符串转换成int(整数)头文件: #include <stdlib.h> atoi() 函数用来将字符串转换成整数(int),其原型为: int atoi (const char * str); [函数说明]atoi() 函数会扫描参数 str 字符串,跳过前面的空白字符(例如空格,tab缩进等,可以通过 isspace() 函数来检测),直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('\0')才结束转换,并将结果返回. [返回值]返回转换后的整

c语言简易计算器小白问题

问题描述 c语言简易计算器小白问题 #include float fun1(float a,float b) { float c; c=a+b; return c; } float fun2(float a,float b) { float c; c=a-b; return c; } float fun3(float a,float b) { float c; c=a*b; return c; } float fun4(float a,float b) { float c; c=a/b; ret

《The C Programming Language》读书笔记总结 &amp;lt;一&amp;gt;.基础篇

写了这么多年的C代码,回过头来再看<The C Programming Language>这本书,作者Brian W. Kernighan和C语言之父Dennis M. Ritchie.感觉里面的知识和书的架构给人非常"合理"的感觉.怎么个合理法呢? 首先书中的代码,如else-if中使用binsearch函数介绍二分查找.atoi介绍字符串s转换为整数.计算器逆波兰表达式,都是实际中非常经典且常用的知识: 然后书中大部分的程序都是基于stdlib.h.string.h.c

在vs2010中用c++写代码时将textbox的文本转换为double类型时总是出错

问题描述 在vs2010中用c++写代码时将textbox的文本转换为double类型时总是出错 double du = double.Parse(textBox5->Text); double dlje = double.valueOf(textBox4->Text); double dljn = atof(textBox3->Text); 错误: 错误 2 error C2062: 意外的类型"double" 错误 5 error C2062: 意外的类型&quo

linux C库函数大全:字符串处理函数

1. atof(将字符串转换成浮点型数) 相关函数 atoi,atol,strtod,strtol,strtoul 表头文件 #include <stdlib.h> 定义函数 double atof(const char *nptr); 函数说明 atof()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('\0')才结束转换,并将结果返回.参数nptr字符串可包含正负号.小数点或E(e)来表示指数部分,如123.456或123e

Linux下常用C语言字符串操作函数

stroul, strdup snprintf() atio   C中常用字符串操作函数 #include <string.h>   size_t strlen(const char *s)   测量字符串长度s的实际长度. 例如s[20]="abc",那么strlen(s)的结果是3,而不是20.这就是实际长度   char *strcat(const char *s1, const *s2)    将字符串s2连接到s1的尾部.从s1的/0开始.   int strcm

c linux sprintf-c sprintf函数第一个参数可以使动态数组吗?

问题描述 c sprintf函数第一个参数可以使动态数组吗? string str="1234.56"; char *ch = new char[str.length()+1]; double tude = atof(str.c_str()); sprintf(ch, "%.5f", tude); 这样格式化double的变量,在内存的读取上存在问题吗? 解决方案 会有问题 因数浮点数精度的问题,可能格式出来需要的空间比原始的字符串空间要大.所以,会出来内存访问越界

指针-atof函数编程怎么理解?

问题描述 atof函数编程怎么理解? double myatof(char *p)//将字符串转换为浮点型,暂时只限小数点格式(如:342.678){ double n=0; int i=-1; while( 1 ) { if (isdigit(*p)) //如果是数字 { n = n*10 + (*p) -'0'; if(i != -1) i++; //小数位数i计数 } else if ( *p == '.' && i == -1) //如果是第一个小数点 i=0; //开启小数位数i