将给定的字符数组转换成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',这种可以说是有效的字符,但是在上面的代码中是判断成无效的字符。当然判断成无效字符也是有道理的。

posted @ 2012-08-30 15:33  kasuosuo  阅读(1071)  评论(0编辑  收藏  举报