您的位置:首页 > 编程语言

8、请编写能直接实现 int atoi(const char * pstr)函数功能的代码

2012-09-05 19:34 399 查看
/************************************************************************/
/* 8、请编写能直接实现 int atoi(const char * pstr)函数功能的代码           */
/************************************************************************/
//考虑全局变量返回结果是否有效,和大数问题
bool isToIntValid =true;
int strToInt(const char *str)
{
long long num = 0;
int mark = (*str== '-' ? -1: 1);
long long upperBound = numeric_limits<int>::max();;
if(mark == -1)
++upperBound;

const char* temp = (*str == '+' || *str == '-') ? str + 1: str;
for( ;*temp >= '0' && *temp <= '9'; ++temp)
{
num = num * 10 + *temp - '0';
if(num > upperBound)
{
//越界,atoi中对于越界直接取最值
isToIntValid = false;
num = upperBound;
break;
}
}
if(*temp !='\0' || *str == '0')
isToIntValid = false;
return  static_cast<int>(mark * num);
}
void testOfstrToInt()
{
assert(atoi("+1234") == strToInt("+1234"));
assert(atoi("-1234") == strToInt("-1234"));
assert(atoi("+aaa234") == strToInt("+aaa234"));
assert(atoi("aaa1234") == strToInt("aaa1234"));
assert(atoi("-1234a") == strToInt("-1234a"));
assert(atoi("1234") == strToInt("1234"));
assert(atoi("12a34") == strToInt("12a34"));
assert(atoi("aaaa") == strToInt("aaaa"));
assert(atoi("0123") == strToInt("0123"));
//大数
assert(atoi("123456789012345123456") == strToInt("123456789012345123456"));
assert(atoi("-123456789012345123456") == strToInt("-123456789012345123456"));
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐