您的位置:首页 > 其它

8、LeetCode--String to Integer (atoi)

2016-05-06 11:11 381 查看
question:Implement 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.

问题的大意:将字符串换成integar,需要注意的是输入的格式,我会在代码中进行讲解

方法一:

与方法二的思想是一样的,代码的解释可参照方法二

int myAtoi(char* str) {
int len = strlen(str);
int max = INT_MAX;
int min = INT_MIN;
long num = 0;
int i = 0;
int flag = 1;

while(str[i] == ' ' || str[i] == '\t')
i++;

if(str[i] == '+' || str[i] == '-')
{
if(str[i] == '-')
flag = 0;
}
else
{
if(str[i] >= '0' && str[i] <= '9')
num = str[i] - '0';
else
return 0;
}

for(i = i+1; i < len; i++)
{
if(str[i] >= '0' && str[i] <= '9')
{
num = 10 * num + str[i] - '0';
if(flag && (num > max))
return max;
if(!flag && (-num < min))
return min;
}
else
break;
}

if(!flag)
num = -num;

return (int)num;
}


方法二:

int myAtoi(char* str) {
char *p = str;
int max = INT_MAX;
int min = INT_MIN;
long num = 0;                       // 注意类型要大于int类型
int flag = 1;                       // 作为正负的标志

while(*p == ' ' || *p == '\t')      // 过滤掉字符串开始的无用字符
p++;

if(*p == '+' || *p == '-')
{
if(*p == '-')                   // 如果为负数,标记为0
flag = 0;
}
else
{
if(*p >= '0' && *p <= '9')
num = *p - '0';
else                            // 格式不符合,返回0
return 0;
}

for(++p; *p; p++)
{
if(*p >= '0' && *p <= '9')
{
num = 10 * num + *p - '0';
if(flag && (num > max))     // 为正数,且当前num大于int类型上界,返回INT_MAX
return max;
if(!flag && (-num < min))   // 为负数,且当前num小于int类型下界,返回INT_MIN
return min;
}
else
break;
}

if(!flag)                          // 为负数,反转
num = -num;

return (int)num;
}


采用指针的方式来遍历字符串,相比方法一更简洁
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: