自己实现atoi和atof
2011-10-31 11:13
405 查看
面试题中经常出现的题目,将一个数字的字符串转换成整数。
需要注意的几个问题:
1,开头是:“+”,或者“-”。
2,进制的考虑,以“0x”开头的是16进制,以“0”开头的是8进制。计算方法: number = number*radix + ret;
3,溢出的考虑,最大正整数: 0x7FFFFFFF,最大负整数:0X8000000。溢出的判断, if(ret<MAX_INT/radix || ret==MAX_INT&&ret<=MAX_INT%radix)
补充一些关于整数溢出的问题,当对最大的正整数+1时,其将变为最大的负整数。之后继续执行++操作时,负整数将不断地变大,再变回为最大的正整数。如此循环。
利用这个原理可以应付如下面试题,不使用任何减法操作,实现如下函数:f(x),返回值是:x-1。
方法就是,引入辅助变量i=1,之后不断地对i和x执行++操作,知道i变为0。
代码如下:
atoi的代码如下:
需要注意的几个问题:
1,开头是:“+”,或者“-”。
2,进制的考虑,以“0x”开头的是16进制,以“0”开头的是8进制。计算方法: number = number*radix + ret;
3,溢出的考虑,最大正整数: 0x7FFFFFFF,最大负整数:0X8000000。溢出的判断, if(ret<MAX_INT/radix || ret==MAX_INT&&ret<=MAX_INT%radix)
补充一些关于整数溢出的问题,当对最大的正整数+1时,其将变为最大的负整数。之后继续执行++操作时,负整数将不断地变大,再变回为最大的正整数。如此循环。
利用这个原理可以应付如下面试题,不使用任何减法操作,实现如下函数:f(x),返回值是:x-1。
方法就是,引入辅助变量i=1,之后不断地对i和x执行++操作,知道i变为0。
代码如下:
int f(int x) { int i = 1,j = x; for (;i;++i,++j); return j; }
atoi的代码如下:
int myAtoI(char* str) { int radix = 10; char *ptr = str; bool flag = false; int number = 0; int digival = 0; int maxval = 0; while(isspace(*ptr)) ptr++; if(*ptr=='+') ptr++; if(*ptr=='-') { flag = true; ptr++; } if(*ptr=='0') { radix = 8; if((*(ptr+1)=='x'||*(ptr+1)=='X')) { radix = 16; ptr++; } ptr++; } maxval = INT_MAX/radix; while(*ptr) { if(isdigit(*ptr)) digival = *ptr - '0'; else if(isalpha(*ptr)) digival = toupper(*ptr) - 'A' + 10; else break; if(number<maxval||number==maxval&&digival<=INT_MAX%radix) number = radix*number + digival; else { //overflow if(flag) return (-INT_MIN); else return INT_MAX; } ptr++; } if(flag) return (-number); else return number; }
相关文章推荐
- 自己实现的atof()和atoi()代码 (转)
- 自己实现的atof()和atoi()代码
- C函数的实现(strcpy,atoi,atof,itoa,reverse)
- 自己实现atoi系列
- atoi 自己实现 leecode
- 自己实现atoi系列
- atoi 函数自己写代码实现
- 自己实现atoi
- C++ Studio (二) ----- atoi()函数的实现 (自己编写功能)
- [转载]C函数的实现(strcpy,atoi,atof,itoa,reverse)
- minix中atoi、atol、atof的实现
- 自己实现atoi
- C++中atof函数的实现和atoi的实现
- C语言实现atoi,itoa和atof
- 自己实现atoi函数功能,另加一个str2num有用的小程序
- atoi(),atof等函数的实现
- 用c语言实现一个自己的atof()函数
- 自己实现的atio()和atof()函数
- 自己编写代码实现atoi和itoa函数的功能
- C/C++ atoi、atof与itoa函数的实现