您的位置:首页 > 其它

[Leetcode]-String to Integer (atoi)

2015-12-19 18:09 405 查看
mplement atoi to convert a string to an integer.

Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input cases.

Notes: It is intended for this problem to be specified vaguely (ie, no given input specs). You are responsible to gather all the input requirements up front.

Update (2015-02-10):

The signature of the C++ function had been updated. If you still see your function signature accepts a const char * argument, please click the reload button to reset your code definition.

题目:字串转整数

注意:细节部分非常多,须要考虑非常多情况

1、int溢出推断

2、正负号,详细情况见main函数中

3、含有空格的情况

结果:4ms

#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <limits.h>
int myAtoi(char* str) {
//"NULL"  "000234"  "+23" "-34" "+-34"  "    010"
if(NULL == str )
return 0;
int sum  = 0.0;
int f  = 0;
int DIV = INT_MAX/10;
while('\0' != *str)
{
if(*str == '+')
{
str++;
if(*str < '0' || *str > '9') return 0;
else    f = 0;
}
if(*str == '-')
{
str++;
if(*str < '0' || *str > '9') return 0;
else    f = 1;
}

if(*str >= '0' && *str<= '9' )
{
if(sum > DIV && f == 0) return INT_MAX;
if(sum > DIV && f == 1) return -INT_MAX-1;

sum = sum * 10.0;

if(INT_MAX - *str + '0' < sum  && f == 0)       return INT_MAX;
if((INT_MAX - (*str - '0') < sum ) && (f == 1)) return -INT_MAX-1;

sum = sum + *str - '0';

str++;
if(*str == '\0')                    break;
else if(*str < '0' || *str > '9')   break;
}
else
{
if(*str >= 'a' && *str <= 'z' )     break;
str++;
}
}
if(f) sum = -sum;
return sum;
}
int main()
{
char *str = "0034";
int r = myAtoi(str);
printf("myAtoi str0 is : %d\n",r);

char *str1 = "00";
int r1 = myAtoi(str1);
printf("myAtoi str1 is : %d\n",r1);

char *str2 = "+23";
int r2 = myAtoi(str2);
printf("myAtoi str2 is : %d\n",r2);

char *str3 = "-2345";
int r3 = myAtoi(str3);
printf("myAtoi str3 is : %d\n",r3);

char *str4 = "+-23";
int r4 = myAtoi(str4);
printf("myAtoi str4 is : %d\n",r4);//  expected 0

char *str5 = "    010";
int r5 = myAtoi(str5);
printf("myAtoi str5 is : %d\n",r5);

char *str6 = "    +0104";
int r6 = myAtoi(str6);
printf("myAtoi str6 is : %d\n",r6);

char *str7 = "    -0187";
int r7 = myAtoi(str7);
printf("myAtoi str7 is : %d\n",r7);//  expected -187

char *str8 = "    -018a567";
int r8 = myAtoi(str8);
printf("myAtoi str8 is : %d\n",r8); //  expected -18

char *str9 = "2147483648";
int r9 = myAtoi(str9);
printf("myAtoi str9 is : %d\n",r9); //  expected 2147483647  因为越界,仅仅取最大

char *str10 = "-2147483649";
int r10 = myAtoi(str10);
printf("myAtoi str10 is : %d\n",r10); //  expected -2147483648

char *str11 = "- 204";
int r11 = myAtoi(str11);
printf("myAtoi str11 is : %d\n",r11); //  expected 0

char *str12 = "b3424242";
int r12 = myAtoi(str12);
printf("myAtoi str12 is : %d\n",r12); //  expected 0

while(0);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: