-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path008_StringToInteger.c
119 lines (106 loc) · 2.09 KB
/
008_StringToInteger.c
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
//10.87
int myAtoi(char* str) {
//Check boundary conditions
if(!str || !strlen(str))
return 0;
//Find first un-blank character
char *ptr = str;
while(*ptr == ' ')
ptr++;
long rst = 0;
bool flag = true; // false while encounter '-', true otherwise
//Check first non-blank character
char firstChar = *ptr;
if(firstChar == '-')
{
flag = false;
ptr++;
}
else if(firstChar == '+')
{
ptr++;
}
else if(firstChar < '0' || firstChar > '9')
return 0;
//Check the second integer unit
//char secChar = *ptr;
//if(secChar < '0' || secChar > '9')
//return 0;
//Process the string iteratively
while(*ptr != '\0')
{
char currChar = *ptr;
if(currChar >= '0' && currChar <= '9')
{
int currUnit = currChar - '0';
rst *= 10;
rst += currUnit;
ptr++;
//Check if it is overflow
if(rst < INT_MAX)
continue;
else if(flag)
return INT_MAX;
else if(-rst <= INT_MIN)
return INT_MIN;
}
else
break;
}
if(!flag)
rst = -rst;
return rst;
}
int myAtoi001(char* str) {
//Check boundary conditions
if(!str || !strlen(str))
return 0;
//Find first un-blank character
char *ptr = str;
while(*ptr == ' ')
ptr++;
long rst = 0;
bool flag = true; // false while encounter '-', true otherwise
//Check first non-blank character
char firstChar = *ptr;
if(firstChar == '-')
{
flag = false;
ptr++;
}
else if(firstChar == '+')
{
ptr++;
}
else if(firstChar < '0' || firstChar > '9')
return 0;
//Check the second integer unit
char secChar = *ptr;
if(secChar < '0' || secChar > '9')
return 0;
//Process the string iteratively
while(*ptr != '\0')
{
char currChar = *ptr;
if(currChar >= '0' && currChar <= '9')
{
int currUnit = currChar - '0';
rst *= 10;
rst += currUnit;
//Check if it is overflow
if(flag && rst >= INT_MAX)
return INT_MAX;
if(!flag && -rst <= INT_MIN)
return INT_MIN;
ptr++;
}
else
{
//ptr++;
break;
}
}
if(!flag)
rst = -rst;
return rst;
}