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
时间: 2024-11-06 21:50:03