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

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.

 1         public static int StringtoInteger(string str)
 2         {
 3             int i = 0;
 4             int sign = 0;
 5             int val = 0;
 6 
 7             while (i < str.Length && ((str[i] >= '0' && str[i] <= '9') || str[i] == ' ' || str[i] == '-' || str[i] == '+'))
 8             {
 9                 if ((val == 0 && sign == 0) && str[i] == ' ')
10                     i++;
11                 else if (str[i] == '-' && sign == 0)
12                 {
13                     sign = -1;
14                     i++;
15                 }
16                 else if (str[i] == '+' && sign == 0)
17                 {
18                     sign = 1;
19                     i++;
20                 }
21                 else if (str[i] >= '0' && str[i] <= '9')
22                 {
23                     //handle overflow, val * 10 + n > int.MaxValue
24                     if (val > (int.MaxValue - (str[i] - '0')) / 10)
25                     {
26                         if (sign == 0 || sign == 1)
27                             return int.MaxValue;
28                         return int.MinValue;
29                     }
30                     val = val * 10 + str[i] - '0';
31                     i++;
32                 }
33                 else
34                 {
35                     if (sign == 0)
36                         return val;
37                     return val * sign;
38                 }
39             }
40             if (sign == 0)
41                 return val;
42             return val * sign;
43         }

代码分析:

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

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

  我这里是按照LeetCode上的Test Case 写的, 迎合大牛的口味。但是面试的时候要跟面试官详细讨论。