当前位置: 代码迷 >> 综合 >> 8、请编写能直接实现 int atoi(const char * pstr)函数功能的代码
  详细解决方案

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

热度:62   发布时间:2024-01-05 04:17:04.0
/************************************************************************/
/* 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"));
}

  相关解决方案