#include<iostream>
#include <string.h>
using namespace std;
double char_x_to_double(char* input_char)
{
int flag = 0;
double sum = 0.0;
double divisor = 10.0;
char *p = input_char;
if (*input_char)
{
//所有输入的数值都必须在(0~9,+,-,.)之中
while(*p)
{
if (!((*p=='+') || (*p=='-')||(*p=='.')|| ((*p>='0') && (*p<='9'))))
{
cout<<"输入非法!请输入数值型参数!例如:12.3,125,-12.6等"<<endl;
return 0.0;
}
p++;
}
//int j=0;
if (*input_char == '+')
{
flag = 1;
input_char++;
//j++;
//cout<<"(flag + )j="<<j<<endl;
}
if (*input_char == '-')
{
flag = -1;
input_char++;
//j++;
//cout<<"(flag - )j="<<j<<endl;
}
//计算小数点前面的和
while(*input_char != '.' && *input_char)
{
sum = sum*10 + (double(*input_char) - 48); //0的ascii码是48
// cout<<"j"<<*input_char<<endl;
input_char++;
//j++;
}
if (*input_char=='.')
{
input_char++;
//计算小数点后面的和
while(*input_char)
{
sum = sum + ( double(*input_char)-48)/divisor;
divisor *= 10;
input_char++;
//j++;
//cout<<"j"<<j<<endl;
}
}
if (flag == 1)
return sum;
if (flag == -1)
return -sum;
return sum;
}
else
{
cout<<"输入为空!"<<endl;;
return 0.0;
}
}
int main()
{
double out_double;
char s1[]="-12.34";
cout<<"输入s1[]="<<s1<<endl;
out_double=char_x_to_double(s1);
cout<<"输出的double类型数为:"<<out_double<<endl;
char s2[]="+23.45";
cout<<"输入s2[]="<<s2<<endl;
out_double=char_x_to_double(s2);
cout<<"输出的double类型数为:"<<out_double<<endl;
char s3[]="3456";
cout<<"输入s3[]="<<s3<<endl;
out_double=char_x_to_double(s3);
cout<<"输出的double类型数为:"<<out_double<<endl;
char s4[]="+3456789";
cout<<"输入s4[]="<<s4<<endl;
out_double=char_x_to_double(s4);
cout<<"输出的double类型数为:"<<out_double<<endl;
char s5[]="";
cout<<"输入s5[]="<<s5<<endl;
out_double=char_x_to_double(s5);
cout<<"输出的double类型数为:"<<out_double<<endl;
char s6[]="abcd";
cout<<"输入s6[]="<<s6<<endl;
out_double=char_x_to_double(s6);
cout<<"输出的double类型数为:"<<out_double<<endl;
return 0;
}
char* to double
最新推荐文章于 2025-06-30 06:00:00 发布
本文介绍了一个将字符数组转换为双精度浮点数的方法,包括处理正负号及小数点的功能。通过实例演示了如何正确解析各种格式的数字字符串,并验证其正确性和健壮性。
1万+

被折叠的 条评论
为什么被折叠?



