在海康的笔试题中出现,将字符串转换为浮点数,并输出,不可以直接用stdlib.h中的函数atof(),现在自己写了一个,输出结果和atof相同。
//字符转化为浮点数,可以直接用atof函数,自己也写了一个
#include<stdio.h>
#include<stdlib.h>//rand(),malloc(),atof()
#include<string.h>
#include<math.h>
double change(char str[]){
double num=0.0;
int len=strlen(str);
int fushu=0;//负数标志
char *p,*i;
p=str;
if(str[0]=='-'){//判断正负号
fushu=1;
p++;
}
int temp;//当前元素的数值
while(p<=str+len){
if(*p>='0'&&*p<='9'){
temp=*p-'0';//数值本身
num=num*10+temp;//整数部分处理
p++;
continue;//继续循环
}
if(*p=='.'){
p++;
int n=1;//记录当前为小数点后几位
for(i=p;i<=str+len;i++){
if(*p>='0'&&*p<='9'){
temp=*p-'0';
num=num+temp*pow(0.1,n);//小数部分处理
p++;
n++;
}
else break;//退出循环
}
if(fushu==0)return num;
else return num*(-1.0);
}
else break;
}
if(fushu==0)return num;
else return num*(-1);
}
int main(){
double val,val1;
char str[20];
gets(str);
val1=change(str);
val=atof(str);//<stdlib.h>
printf("字符串值=%s,浮点数=%lf,自己写的函数=%lf\n",str,val,val1);
return 0;
}