调用函数实现字符串转实数以及手动实现该功能 ----- atof
1 #include<stdio.h> 2 #include<stdlib.h> 3 4 5 double myatof(char *str);// 手动实现 将字符串转化为实数 6 7 void main() 8 { 9 char str[30] = "123.3456"; 10 double db = atof(str);// 将字符串转化为实数 11 printf("%f\n",db); 12 13 // 调用手动实现字符串转实数函数 14 double db1 = myatof(str); 15 printf("%f\n", db1); 16 17 system("pause"); 18 } 19 20 // 手动实现 将字符串转化为实数 21 double myatof(char *str) 22 { 23 double db = 0.0; // 保存转化后的数据 24 char *istr = str;// 定义指针变量接收传入的字符串 25 26 while (*istr!='\0') 27 { 28 if ((*istr>'9' || *istr <'0') && *istr != '.' && *istr != '-' && *istr != '+')// 不是数字,也不是. 也不是-,+ 为垃圾字符 29 { 30 return db; 31 } 32 istr++; 33 } 34 35 double fh = 1.0;// fh 为符号位 判断字符串的正负 36 37 if (*str == '-')// 检测第一个字符是否为符号位 38 { 39 fh *= -1;// 为负数 40 str++; 41 } 42 else if (*str == '+') 43 { 44 str++; 45 } 46 47 while (*str != '.') 48 { 49 db *= 10; // //123 0*10+1 1*10+2 12*10+3 123 50 db += *str - '0';// 取得整数部分 51 str++; 52 } 53 54 str++;// 直接跳过 . 进入小数部分 55 56 double xiaoshu = 1.0; 57 58 while (*str != '\0') 59 { 60 xiaoshu /= 10; // 0.234 1 0.1*2 +0.01*3+0.001*4 61 db += xiaoshu*(*str - '0');// 累加小数 62 str++; 63 } 64 65 66 db *= fh; 67 return db; 68 }
长风破浪会有时,直挂云帆济沧海
posted on 2015-05-13 14:45 Dragon-wuxl 阅读(291) 评论(0) 收藏 举报
浙公网安备 33010602011771号