测试用例 | 库实现 | MyAtoi | 用例备注 | |
Return | g_inputIllegal | |||
NULL | 未定义 | 0 | True |
|
“” | 0 | 0 | True |
|
“ \n34” | 34 | 34 |
|
|
“123” | 123 | 123 |
|
|
“-123” | -123 | -123 |
|
|
“+123” | 123 | 123 |
|
|
“+-123” | 0 | 0 | True |
|
“ -123” | -123 | -123 |
|
|
“ 23s4” | 23 | 23 |
|
|
“ s34” | 0 | 0 | True |
|
1382983754 | 1382983754 |
|
| |
“-111112222233333444445555566666” | -1382983754 | -1382983754 |
|
|
“1111111111”(10个1) | 1111111111 | 1111111111 |
|
|
“11111111111”(11个1) | -1773790777 | -1773790777 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#include <cstdlib>
#include <iostream>
using namespace std;
bool g_inputIllegal = false;
int myAtoi(char * str)
{
if(str == NULL)
{
g_inputIllegal = true;
return 0;
}
else
{
g_inputIllegal = false;
}
bool isNegative = false;
unsigned int res = 0;
while(*str == ' ' || *str == '\t' || *str == '\n')
{
++str;
}
if(*str == '-')
{
isNegative = true;
++str;
}
else if(*str == '+')
{
++str;
}
char * start = str;
while(*str != '\0' && *str >= '0' && *str <= '9')
{
res = res * 10 + (*str - '0');
if(res > INT_MAX)
{
g_inputIllegal = true;
return 0;
}
++str;
}
if(start == str)
{
g_inputIllegal = true;
return 0;
}
if(isNegative)
{
res = 0 - res;
}
return res;
}
int main(int argc, char *argv[])
{
char * strs[] = {NULL, "", " \n34 ", "123", "-123", "+-123", "+123", " -123", " 23s34",
" s78", "111112222233333444445555566666",
"-111112222233333444445555566666",
"1111111111",
"11111111111",
"12147483647",
"2147483647"};
//"4294967295"};
for(int i = 1; i < 16; i++)
{
cout << i << " " << strs[i] << ":\t" << atoi(strs[i]) << "\t" << myAtoi(strs[i]) << "\t" << g_inputIllegal << endl;
}
system("PAUSE");
return EXIT_SUCCESS;
}