字符串常用的转换函数atof、atoi、atol等
其主要作用为将字符串转换成浮点型、整型、长整型、double型
应用举例
#include<stdlib.h>
#include<stdio.h>
int main()
{
char *a="123456";
char *b="123.456";
char *c="-123456e-3";
char *d="df1.2eddf";
printf("a=%d\n",atoi(a));
printf("b=%f\n",atof(b));
printf("c=%f\n",atof(c));
printf("d=%f\n",atof(d));
}
执行结果:
对atof进行实现
函数声明:double myatof(const char *str);
函数功能:对字符串str进行扫描,开头跳过空格符,识别并返回出浮点数(格式为±xxx.xxx或者±xx.xxexxx)
当遇到不是有效字符(数字和字符'.'、'e'、'E')时返回已转换的数(详细请见atof百度百科)
#include<stdlib.h>
#include<stdio.h>
double myatof(const char *str);
int main()
{
char *a=" 123456e-2";
char *b="123.456";
char *c="-123.456e-3";
char *d="1.2ed123";
printf("a=%f\n",myatof(a));
printf("b=%f\n",myatof(b));
printf("c=%f\n",myatof(c));
printf("d=%f\n",myatof(d));
}
double myatof(const char *str)
{
int negative=0; //标记正负号,数为负时置为1
double num=0; //数值
double index=0; //记录科学计数法中10的指数
while(*str==' ') //吸收空格
str++;
if(*str=='-') //识别正负数
{
negative=1;
str++;
}
else if(*str=='+')
str++;
while(str[0]!='\0') //获取整数部分
{
if(*str=='.') //遇到小数点时跳出
break;
if(*str=='e'||*str=='E') //如果包含科学计数法时跳出
break;
if(*str<'0'||*str>'9') //遇到非有效字符时返回字符串已转换的数值
return num;
num=num*10+(*str-'0');
str++;
}
if(*str=='.') //获取小数部分
{
str++;
int i=10;
while(*str!='\0')
{
if(*str=='e'||*str=='E') //如果包含科学计数法时跳出
break;
if(*str<'0'||*str>'9') //遇到非有效字符时返回字符串已转换的数值
return num;
num=num+((float)(*str-'0'))/i;
i=i*10;
str++;
}
if(*str=='e'||*str=='E')
{
str++;
index=myatof(str); //调用自身获取科学计数法中10的指数
}
}
else if(*str=='e'||*str=='E')
{
str++;
index=myatof(str);
}
if(index>0) //计算最终值
for(int i=0;i<index;i++)
num=num*10;
if(index<0)
for(int i=0;i>index;i--)
num=num/10;
if(negative==1)
num=-num;
return num;
}
执行结果: