#include<stdio.h>
#include<math.h>
typedefint bool;
#define true1
#define false0
#define MAXIMUM1.7E+308
//#define MINIMUM1.7E-308
double stol(constchar *str)
{
bool sign=false;
bool hasPoint=false;
double valueBeforePoint=0.0;
double valueAfterPoint=0.0;
int deCount=0;
//如果输入字符串的地址错误或者为空字符串
if(str==NULL||str[0]=='\0')
{
printf("invalid parameter!\n");
return 0;
}
int i=0;
for(;str[i]!='\0';i++)
{
//判断第一个字符是否为符号
if(i==0&&(str[0]=='-'||str[0]=='+'))
{
if(str[0]=='-')
sign=true;
}
else
{
//if(hasPoint==false&&i!=0&&str[i]=='.'&&hasSign)
//判断是否有小数点,删除三种情况:
//1.已经找到了一个小数点;
//2.str[0]不能为小数点;
//3.需要区分字符串的首个字符是否是正负号,如果有正负号,那么str[1]不能为小数点,否则可以。
if(hasPoint==false&&i!=0&&str[i]=='.'&&(str[0]!='-'||str[0]!='+'))
hasPoint=true;
else
{
if('0'<=str[i]&&'9'>=str[i])
{
if(hasPoint==false)
{
valueBeforePoint=valueBeforePoint*10+str[i]-'0';
if(valueBeforePoint>MAXIMUM)
{
printf("out of range!\n");
return 0;
}
}
else
{
valueAfterPoint=valueAfterPoint*10+str[i]-'0';
deCount++;
}
}
else
{
printf("Input string isn't a double !\n");
return 0;
}
}
}
}
//最终返回值为小数点前面的值加上小数点后面的值
valueBeforePoint=valueBeforePoint+valueAfterPoint/pow(10,deCount);
return sign?(-1*valueBeforePoint):valueBeforePoint;
}
int main()
{
/*
"" -->invalid parameter!//无效的参数
"-1234.0001" -->-1234.0001 //带有符号的正常浮点数
"+124." -->124 //结尾是小数点的字符串
"cab124" -->0 //字符串开头为字母
"12a23" -->0 //字符串既有数字又有字母
"123.234" -->123.234 //无符号的浮点数
"111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"-->out of range!
*/
char str[7][1000]={"","-1234.0001","+124." ,"cab124","12a23","123.234","111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"};
int i=0;
for(;i<7;i++)
{
double valueOfStr=stol(str[i]);
if(valueOfStr>0.0000001||valueOfStr<-0.0000001)//如果返回值不为0,即没有出现某种错误,那么就输出valueOfStr
printf("%f\n",valueOfStr);
}
return 0;
}
字符串转换成double类型数字
最新推荐文章于 2023-06-13 16:40:59 发布