您的位置:首页 > 编程语言 > C#

LeetCode Online Judge 题目C# 练习 - String to Integer (atoi)

2012-10-18 00:44 519 查看
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.

public static int StringtoInteger(string str)
{
int i = 0;
int sign = 0;
int val = 0;

while (i < str.Length && ((str[i] >= '0' && str[i] <= '9') || str[i] == ' ' || str[i] == '-' || str[i] == '+'))
{
if ((val == 0 && sign == 0) && str[i] == ' ')
i++;
else if (str[i] == '-' && sign == 0)
{
sign = -1;
i++;
}
else if (str[i] == '+' && sign == 0)
{
sign = 1;
i++;
}
else if (str[i] >= '0' && str[i] <= '9')
{
//handle overflow, val * 10 + n > int.MaxValue
if (val > (int.MaxValue - (str[i] - '0')) / 10)
{
if (sign == 0 || sign == 1)
return int.MaxValue;
return int.MinValue;
}
val = val * 10 + str[i] - '0';
i++;
}
else
{
if (sign == 0)
return val;
return val * sign;
}
}
if (sign == 0)
return val;
return val * sign;
}


代码分析:

  atoi, 最重要是讨论输入的validation。怎么样的输入才是合法输入,如果碰到不合法的字符,返回什么东西。而且还要处理一下overflow。

  当然主要逻辑就是这一句了val = val * 10 + str[i] - '0';

  我这里是按照LeetCode上的Test Case 写的, 迎合大牛的口味。但是面试的时候要跟面试官详细讨论。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: