将给定的字符数组转换成float类型
1. 这道题主要是要将几种情况考虑完整,一下给出的程序考虑以下几种情况:
(1)以'+'开始的字符串
(2)以‘-’开始的字符串
(3)出现多个点‘.’的字符串
(4)出现非法字符
(5)不合理的组合方式
2. 代码如下:
1 bool flag=true; 2 float ctof(const char* str) 3 { 4 assert(str); 5 float res=0.0f; 6 float Intpart=0.0f; 7 float Dotpart=0.0f; 8 bool minus=false; 9 const char* tmp=str; 10 if (*tmp=='-') 11 { 12 minus=true; 13 tmp++; 14 } 15 if (*tmp=='+') 16 { 17 tmp++; 18 } 19 bool hasDot=false; 20 float DotpartNumber=1.0f; 21 while (*tmp!='\0') 22 { 23 if (*tmp=='.' && !hasDot) 24 { 25 hasDot=true; 26 tmp++; 27 } 28 else if (*tmp>='0' && *tmp<='9') 29 { 30 if (hasDot) 31 { 32 DotpartNumber*=10; 33 Dotpart=Dotpart+(*tmp-'0')/DotpartNumber; 34 } 35 else 36 { 37 Intpart=Intpart*10+(*tmp-'0'); 38 } 39 tmp++; 40 } 41 else 42 { 43 flag=false; 44 return 0.0f; 45 } 46 } 47 res=Intpart+Dotpart; 48 if (minus) 49 { 50 res=-res; 51 } 52 return res; 53 } 54 int main () 55 { 56 //char* str="12.34"; 57 //char* str="-12.34"; 58 //char* str="--12.34"; 59 //char* str="-12.3.4"; 60 //char* str="-0012.0034"; 61 //char* str="+12.34"; 62 char* str="-12.34"; 63 float res=ctof(str); 64 if (flag) 65 { 66 cout<<res<<endl; 67 } 68 else 69 { 70 cout<<"Wrong Input Format!!!"<<endl; 71 } 72 return 0; 73 }
3. 上述代码将浮点部分和整数部分分别计算,最后求加和。一个全局的变量flag,判断输入格式是否正确。
4. 这是一道网易的笔试题。
5. 上面的代码没有考虑这样一种情形:'-12.34f',这种可以说是有效的字符,但是在上面的代码中是判断成无效的字符。当然判断成无效字符也是有道理的。