任务描述:将科学计数法字符串转化为实数
#include<stdio.h>
// 将科学计数法字符串转化为实数
// 如 1.345-e2 为0.01345
// 注意,单个字符转化为对应的数字不能用(int) char,应该用 char - '0'
float convert(char *num){
printf("开始转换%s\n",num);
float num1 = 0.0,num2 = 0.0;
int sign = 1;
int exp = 1,cishu = 0;
//表示e后面是正号还是负号,正号为1,负号为-1
//cishu表示是几次饭
char *p = num;
if(*p == '-'){
sign = -1;
p++;
//如果小数是复数
}
while(isdigit(*p)){
num1 = num1 * 10 + *p - '0';
p++;
//小数点前面的部分
}
printf("num1:%f\n",num1);
float i = 0.1;
p++;
while(isdigit(*p)){
num2 += i * (*p- '0');
i *= 0.1;
p++;
}
//小数点后面的部分
printf("num2:%f\n",num2);
if(*p == 'e' || *p == 'E')
p++;
if(*p == '-'){
exp = -1;
p++;
}else if(*p == '+')p++;
while(*p != '\0') {
cishu = cishu*10 + *p - '0';
p++;
}
printf("cishu:%d\n",cishu);
float result = sign*(num1+num2);
if(exp == -1) i = 0.1;
else i = 10;
for(int j=0;j<cishu;j++) result*=i;
return result;
}
int main()
{
char *str = "21.345e2";
float result = convert(str);
printf("%f",result);
return 0;
}