-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathstring_to_integer_(atoi).c
64 lines (59 loc) · 1.5 KB
/
string_to_integer_(atoi).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
int isInt(char curChar){
int cur = curChar;
return cur >= 48 && cur <= 57;
}
int isWhitespaceOrDash(char curChar){
return curChar == ' ' || curChar == '-' || curChar == '+';
}
int isAcceptableChar(char curChar){
return isInt(curChar) || isWhitespaceOrDash(curChar);
}
int calculateAnswer(int answer, int isNegative){
if(isNegative < 0){
return -1 * answer;
}
return answer;
}
int myAtoi(char * str){
if(!strlen(str)){
return 0;
}
long answer = 0;
int isNegative = 1;
int isSigned = 0;
int visitedNum = 0;
int i = 0;
char cur = str[i];
while(cur && isAcceptableChar(cur)){
if(isWhitespaceOrDash(cur)){
if(visitedNum){
return answer;
}
if(isSigned){
return 0;
}
if(cur == '-'){
if (isNegative < 0 || answer != 0){
return answer;
}
isNegative = -1;
isSigned = 1;
} else if(cur == '+'){
isSigned = 1;
}
} else {
visitedNum = 1;
int curInt = (cur - 48) * isNegative;
answer = (answer * 10) + (curInt);
if(isNegative < 0 && answer < INT_MIN){
return INT_MIN;
}
if(isNegative > 0 && answer > INT_MAX){
return INT_MAX;
}
}
i += 1;
cur = str[i];
}
return answer;
}