一道面试题:
不使用库函数,实现int StrToInt(const char* string);
难点:(考虑尽量全面)
1、空指针时,处理情况
2、输入不合法时,处理情况
3、溢出时处理情况
测试用例:
1、+789
2、-12
3、789
4、12-47
5、空
6、超出int范围的一个数
代码:
- /*
- 1、判断是否为空
- 2、判断正负
- 3、判断是否有非法输入
- 4、判断溢出
- 5、如果是非法情况,返回值为0
- */
- int StrToInt(const char* str)
- {
- if ( !str )
- return 0;
- int cur = 0;
- int flag = 1; //标志该数正负
- int number = 0;
- while ( *(str+cur) != '\0' )
- {
- if ( cur == 0 && *(str+cur) == '-' )
- {
- flag = -1;
- }
- else if ( cur == 0 && *(str+cur) == '+' )
- {
- flag = 1;
- }
- else if ( cur == 0 && *(str+cur)>='0' && *(str+cur)<='9' )
- {
- flag = 1;
- number = number*10 + (*(str+cur)-'0');
- }
- else if ( cur == 0 && *(str+cur)<'0' && *(str+cur)>'9' )
- {
- return 0; //第一个字符为非法字符
- }
- //判断将后面的字符转换成数字
- if ( cur != 0 )
- {
- if ( *(str+cur)>='0' && *(str+cur)<='9' )
- {
- number = number*10 + (*(str+cur)-'0');
- if ( number%10 != (*(str+cur)-'0') ) //溢出判断
- return 0;
- }
- else
- return 0; //后面字符有非法字符
- }
- cur++; //判断下一个字符
- }
- if ( flag == -1 )
- return (0-number);
- else
- return number;
- }
原文地址:点击打开链接