字符串函数---atof()函数详解及实现(完整版)
atof()函数
atof():double atof(const char *str );
功 能: 把字符串转换成浮点数
str:要转换的字符串。
返回值:每个函数返回 double 值,此值由将输入字符作为数字解析而生成。 如果该输入无法转换为该类型的值,则返回值为 0.0。
函数说明 :atof()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时(" ")才结束转换,并将结果返回,str字符串可包含正负号、小数点或E(e)来表示指数部分。
#include<iostream> using namespace std; double atof_my(const char *str) { double s=0.0; double d=10.0; int jishu=0; bool falg=false; while(*str==" ") { str++; } if(*str=="-")//记录数字正负 { falg=true; str++; } if(!(*str>="0"&&*str<="9"))//如果一开始非数字则退出,返回0.0 return s; while(*str>="0"&&*str<="9"&&*str!=".")//计算小数点前整数部分 { s=s*10.0+*str-"0"; str++; } if(*str==".")//以后为小树部分 str++; while(*str>="0"&&*str<="9")//计算小数部分 { s=s+(*str-"0")/d; d*=10.0; str++; } if(*str=="e"||*str=="E")//考虑科学计数法 { str++; if(*str=="+") { str++; while(*str>="0"&&*str<="9") { jishu=jishu*10+*str-"0"; str++; } while(jishu>0) { s*=10; jishu--; } } if(*str=="-") { str++; while(*str>="0"&&*str<="9") { jishu=jishu*10+*str-"0"; str++; } while(jishu>0) { s/=10; jishu--; } } } return s*(falg?-1.0:1.0); } int main() { char *s1=" 123.456567567e-10"; char *a1=" 123.456567567e-10"; char *s2="1234567.235e+10"; char *a2="1234567.235e+10"; char *s3=" 123.45656 7567e-10"; char *a3=" 123.45656 7567e-10"; double sum_1=atof_my(s1); double sum1=atof(a1); double sum_2=atof_my(s2); double sum2=atof(a2); double sum_3=atof_my(s3);//遇到" "结束 double sum3=atof(a3); cout<<"atof_my:"<<sum_1<<endl; cout<<"atof :"<<sum1<<endl; cout<<"atof_my:"<<sum_2<<endl; cout<<"atof :"<<sum2<<endl; cout<<"atof_my:"<<sum_3<<endl; cout<<"atof :"<<sum3<<endl; system("pause"); return 0; }运行结果比较图:
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇:没有了
- 下一篇: 字符串函数---strcat()与strncat详解及实现