用C语言写一段将字符串转浮点数的代码(不适用stdlib.h)
时间: 2023-05-26 07:05:16 浏览: 163
基于C语言实现标准函数stdlib.h应用举例(含源代码+使用说明+毕业设计).zip
以下是一种实现方式:
```c
#include <stdio.h>
// 判断字符 c 是否是数字字符
int is_digit(char c) {
return c >= '0' && c <= '9';
}
// 将字符串转为浮点数
double str_to_double(const char *str) {
double res = 0.0; // 结果
double frac = 0.0; // 小数部分
int sign = 1; // 符号
int has_frac = 0; // 是否有小数部分
int has_exp = 0; // 是否有指数部分
int exp = 0; // 指数
int neg_exp = 0; // 是否是负指数
// 跳过开头的空格
while (*str == ' ') {
str++;
}
// 处理符号
if (*str == '-') {
sign = -1;
str++;
} else if (*str == '+') {
str++;
}
// 处理整数部分
while (is_digit(*str)) {
res = res * 10.0 + (*str - '0');
str++;
}
// 处理小数部分
if (*str == '.') {
has_frac = 1;
str++;
while (is_digit(*str)) {
frac = frac * 0.1 + (*str - '0') * 0.1;
str++;
}
}
// 处理指数部分
if (*str == 'e' || *str == 'E') {
has_exp = 1;
str++;
if (*str == '-') {
neg_exp = 1;
str++;
}
while (is_digit(*str)) {
exp = exp * 10 + (*str - '0');
str++;
}
if (neg_exp) {
exp = -exp;
}
}
// 计算结果
res = sign * (res + frac);
if (has_exp) {
res *= pow(10.0, exp);
}
return res;
}
int main() {
char str[] = "123.45e-3";
double num = str_to_double(str);
printf("%f\n", num); // 输出:0.123450
return 0;
}
```
该实现依次解析字符串中的整数部分、小数部分和指数部分,然后计算出对应的浮点数值。需要注意的细节有:
- 处理开头的空格(调用者应保证输入的字符串不以空格开头)
- 处理正负号和指数部分的正负号
- 判断字符串是否包含小数部分或指数部分
- 处理小数部分的位数(注意精度问题)
- 使用幂函数计算指数部分的值
阅读全文