整数装换为字符串intToArray与字符串转为整数 arrayToInt实现

7.  整数装换为字符串itoa的实现

 1 char *intToArray(int number, char *str)
 2 {
 3     if(str == NULL)
 4     {
 5         return NULL;
 6     }
 7     char *ret = str;
 8     char *left = str;
 9     char temp = '\0';
10     // 负数的处理
11     if(number < 0)
12     {
13         number = -number;
14         *ret++ = '-';
15         left++;
16     }
17     // 辗转对10求余法 分离各个位的数字
18     while (number > 0)
19     {
20         *ret++ = number%10 + '0'; // 将数字转化为ascall码
21         number = number/10;
22     }
23     *ret = '\0';
24     ret--;
25     
26     /* 逆序 */
27     while (ret > left)
28     {
29         temp = *left;
30         *left++ = *ret;
31         *ret-- = temp;
32     }
33     return str;
34 }

 

字符串转为整数 arrayToInt

需考虑字符串是负数、是否包含字母,及转换后的数字是否溢出等情况,包含字母的处理 -123asd455 则为-123,asd122作为0处理。

 1 int arrayToInt(char *str)
 2 {
 3     
 4     /* 思路: 逐一遍历字符串 为空 或者 为字符就结束遍历 取出的字符逐一*10*/
 5     long long val = 0;
 6     int flag = 0;
 7     char *src = str;
 8     bool minus = false;
 9     /* 安全性 */
10     if(str == NULL)
11     {
12         return 0;
13     }
14     // 处理正负符号的情况 无论正负都占一个位使指针加一
15     if(*src == '-')
16     {
17         src++;
18         minus = true;
19     }
20     else if (*src == '+')
21     {
22         src++;
23     }
24     
25     while ((*src != '\0') && ((*src - '0' >= 0) && (*src - '0' <= 9)))
26     {
27         //逐位乘以10
28         flag = minus ? -1:1;
29         val = val * 10 + flag*(*src - '0');
30         /* 处理溢出问题:int最大值0x7FFFFFFF 最小值80000000 */
31         if(((minus) && (val > 0x7FFFFFFF)) ||
32            ((!minus) && (val < (signed int)0x80000000)))
33         {
34             val = 0;
35             break;
36         }
37         src++;
38     }
39     printf("val= %d",(int)val*flag);
40     return (int)val;
41 }
42  

 

posted @ 2015-05-11 17:03  HugoJiang  阅读(1144)  评论(0编辑  收藏  举报