测试用例 |
库实现 |
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;
}