`

atof(char s[])函数的完善版本

 
阅读更多

可以处理类似 123.45E-6之类的科学计数法的字符串


#include "stdio.h"
#include "stdlib.h"
#include "ctype.h"

main()
{ 
       double atof2(char s[]);
       printf("%f\n",atof2("123.45E4"));
       system("pause");
}

double atof2(char s[])
{
  double val,power,endval=1.0;
  int i,sign,exponent;
  
  for(i=0;isspace(s[i]);i++)
     ;
  
  sign=(s[i]=='-')?-1:1;
  
  if(s[i]=='+'||s[i]=='-')
    i++;
    
  for(val=0.0;isdigit(s[i]);i++)
       val=10.0*val+(s[i]-'0'); 
  if(s[i]=='.')
     i++;
     
  for(power=1.0;isdigit(s[i]);i++)
  {
     val=10.0*val+(s[i]-'0');
     power*=10.0;
                                     
  }              
  
  val=sign*val/power;
 // printf("%f\n",val); 
  
  if(s[i]=='e'||s[i]=='E')
    i++;
    
  sign=(s[i]=='-')?-1:1;
  if(s[i]=='-'||s[i]=='+')
    i++;
    
  for(exponent=0;isdigit(s[i]);i++)
     exponent= 10*exponent+(s[i]-'0');  
   
  for(i=0;i<exponent;i++)
    endval=endval*10;
    // printf("%f\n",val); 
  if(sign==-1)
    endval=1.0/endval;
    
  
  // printf("%f\n",endval);
 
    
  return  val*endval;
  
   
 
}



分享到:
评论

相关推荐

    ACM实用函数选.doc

    函数名: atof 功 能: 把字符串转换成浮点数 用 法: double atof(const char *nptr); 程序例: #include #include int main(void) { float f; char *str = "12345.67"; f = atof(str); printf("string = %s ...

    C++ 四舍五入函数

    参考了一些网友的资料,自己动手写了四舍五入函数。代码如下: //num 是待四舍五入的数 //presion 是保留的小数位数 ... float result = atof((LPCTSTR)s); return result; //返回四舍五入后的数 }

    VC++类型转换整理(PDF格式)

    1、CString to char* ...和第5个技巧一样,使用atof()函数可以转换成float型,例如: char c[10]; float f; f = atof(c); 7、Char* to int 和第5个技巧完全一样,例如: char *str = "100"; int i; i = atoi(str);

    C语言函数及相关知识

    用 法: double atof(const char *nptr); 程序例: #include #include int main(void) { float f; char *str = "12345.67"; f = atof(str); printf("string = %s float = %f\n", str, f); return 0; } ...

    c语言标准库中字符转换函数和数字转换函数

    将字符转换为整型 例:char ch1;int i=atoi(ch1); atol();将字符转化为长整型 例:char ch2;long l=atol(ch2); atof();将字符转化为浮点型 例:char ch3;float f=atof(ch3); strtod(); 将字符串转化为双精度类型...

    -C++参考大全(第四版) (2010 年度畅销榜

    30.5 atof函数 30.6 atoi函数 30.7 atol函数 30.8 bsearch函数 30.9 div函数 30.10 exit函数 30.11 getenv函数 30.12 labs函数 30.13 ldiv函数 30.14 longjmp函数 30.15 mblen函数 30.16 mbstowes函数 30.17 mbtowc...

    C语言讲义.doc

    2.3 函数的参数为CHAR * 64 2.4 指针数组做为MAIN函数的形参 65 3 内存管理 65 3.1 作用域 65 3.1.1 auto自动变量 65 3.1.2 register寄存器变量 65 3.1.3 代码块作用域的静态变量 66 3.1.4 代码块作用域外的静态变量...

    明解C语言(第3版)入门篇.[日]柴田望洋(带详细书签).pdf 【半高清】

    atoi函数、atol函数、atof函数:转换字符串 333 总结 336 第12章 结构体 339 12-1 结构体 340 数据关联性 340 结构体 342 结构体成员和运算符 344 成员的初始化 345 结构体成员和-&gt;运算符 346 结构体和...

    大整数乘法

    c[m]=char(s+38); } else { jin=0; c[m]=char(s+48); } } if(jin==1) c[0]='1'; else c[0]=' '; if(g==1) { cout两数相加的结果为:"; if(f==0) for(i=0;i;i++) cout[i]; else { cout; for(i=0;i;i+...

    学生信息管理系统代码

    infile.eof()) //当读到文件尾时,函数返回1;否则返回0 { p1=new Student1; infile&gt;&gt;buff; if(infile.eof()) break; p1-&gt;num=new char[strlen(buff)+1]; strcpy(p1-&gt;num,buff); infile&gt;&gt;buff; p1-&gt;...

    tcl 入门学习.md

    (1)初始化函数Init的名字必须是文件名首字母大写+"_Init",上文c文件名是numsort.c, 故初始化函数名为Numsort_Init; ## 2 编译生成动态库 (1) 格式: gcc -fPIC -shared ____.c -o lib____.so ``` $ gcc -fPIC...

    CString,字符串,整数等相互转换方法(推荐)

    字符串转int int atoi(const char *string); _int64 _atoi64(const char *string); int _wtoi(const wchar_t *string); _int64 _ wtoi64(const...double atof(const char *string); double _wtof(const wchar_t *st

    杭电电子综合设计.docx

    的函数原型为:sprintf( char *buffer, const char *format, [ argument] … );本句是将ad的值表示成有一位小数的浮点数,然后再在后面加上'v'和换行字符一起放到数组sendst中r 2、oldkey = 0; while (1) { if (GPIO...

Global site tag (gtag.js) - Google Analytics