今天看到一个题,让把字符串转成浮点数,列了一下,需要注意的应该就是这几点
- 前导空白字符
- 符号位
- 前导零
#include <stdio.h>
#include <string.h>
#include <math.h>
double a2f(char *str) {
// leading space
while (*str==' ' || *str=='t') {
str++;
}
// judge sign
int sign = 1;
if (*str == '-') {
sign = -1;
str++;
} else if (*str=='+') {
sign = 1;
str++;
} else if (*str>='0' && *str<='9') {
sign = 1;
} else {
// exception
return 0;
}
// leading zero
while (*str == '0') {
str++;
}
int integer=0, decimals=0, e=0;
int point_found = 0;
for (; *str!='\0'; str++) {
if (*str>='0' && *str<='9') {
if ( ! point_found) {
integer = integer*10 + (*str-'0');
} else {
decimals = decimals*10 + (*str-'0');
e++;
}
} else if (*str == '.') {
if ( ! point_found) {
point_found = 1;
} else {
// exception
return 0;
}
} else {
// exception
return 0;
}
}
return sign*(integer+decimals*pow(10, e*-1.0));
}
int main() {
printf("%lfn", a2f("-000123.45600"));
return 0;
}
==================================
2012-10-14 19:18:25 update 哦,对了,上面的代码没有考虑浮点溢出