-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathStringtoInteger.h
More file actions
82 lines (76 loc) · 2.17 KB
/
StringtoInteger.h
File metadata and controls
82 lines (76 loc) · 2.17 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
/**************************************
* Author : luoshikai
* Version : 1.0
* Date : 2013-10-07
* Email : [email protected]
*************************************/
/**************************************
* 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.
*
* spoilers alert... click to show requirements for atoi.
*
* Requirements for atoi:
* The function first discards as many whitespace characters as necessary until
* the first non-whitespace character is found. Then, starting from this
* character, takes an optional initial plus or minus sign followed by as many
* numerical digits as possible, and interprets them as a numerical value.
*
* The string can contain additional characters after those that form the
* integral number, which are ignored and have no effect on the behavior of
* this function.
*
*
* If the first sequence of non-whitespace characters in str is not a valid
* integral number, or if no such sequence exists because either str is empty
* or it contains only whitespace characters, no conversion is performed.
*
* If no valid conversion could be performed, a zero value is returned. If the
* correct value is out of the range of representable values, INT_MAX
* (2147483647) or INT_MIN (-2147483648) is returned.
*************************************/
class Solution
{
public:
int atoi(const char *str)
{
int pos = 0, sign = 1;
double result = 0;
if (str == NULL)
{
return 0;
}
while (str[pos] == ' ' || str[pos] == '"')
{
++pos;
}
if (str[pos] == '-')
{
sign = -1;
++pos;
}
if (str[pos] == '+')
{
++pos;
}
while (str[pos] >= '0' && str[pos] <= '9')
{
if (result > INT_MAX)
{
break;
}
result = result * 10 + str[pos++] - '0';
}
if (result > INT_MAX)
{
return (sign == -1) ? INT_MIN : INT_MAX;
}
return result * sign;
}
};