-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathLC_8_GFG_ImplementAtoi.cpp
138 lines (114 loc) · 3.06 KB
/
LC_8_GFG_ImplementAtoi.cpp
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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
/*
https://practice.geeksforgeeks.org/problems/implement-atoi/1#
Implement Atoi
https://leetcode.com/problems/string-to-integer-atoi/
*/
//LC ----------------------------------------
class Solution {
public:
int myAtoi(string str) {
int result = 0;
int sign = 1;
int i=0;
// if whitespaces then ignore.
while (str[i] == ' ')
{
i++;
}
//SIGN
if(str[i] == '-')
{
sign = -1;
i++;
}
else if(str[i] == '+')
i++;
if(isalpha(str[i])) //first alpha is character then return zero
return 0;
// digit conversion
for( ; i<str.length(); i++)
{
if(str[i] >= '0' && str[i] <= '9')
{
// handling overflow test case
if (result > INT_MAX / 10 || (result == INT_MAX / 10 && (str[i] - '0') > 7)) //Value of INT_MAX is +2147483647, 7->INT_MAX % 10)
{
if (sign == 1)
return INT_MAX;
else
return INT_MIN;
}
result = result * 10 + (str[i] - '0'); //shift // add digit
}
else
{
return result*sign;
}
}
return result*sign;
}
};
// GFG----------------------------------------
// { Driver Code Starts
//Initial template for C++
#include <bits/stdc++.h>
using namespace std;
// } Driver Code Ends
//User function template for C++
class Solution{
public:
/*You are required to complete this method */
int atoi(string str) {
//Your code here
int result = 0;
int sign = 1;
int i=0;
// if whitespaces then ignore.
while (str[i] == ' ')
{
i++;
}
//SIGN
if(str[i] == '-')
{
sign = -1;
i++;
}
// digit conversion
for( ; i<str.length(); i++)
{
int d =0;
if(str[i] >= '0' && str[i] <= '9')
{
// handling overflow test case
// if (result > INT_MAX / 10 || (result == INT_MAX / 10 && str[i] - '0' > 7))
// {
// if (sign == 1)
// return INT_MAX;
// else
// return INT_MIN;
// }
d = str[i] - '0'; //relative value
result = result * 10; //shift
result = result + d; // add digit
}
else
return -1;
}
// if(signNeg) result = -result;
return result*sign;
}//end
};
// { Driver Code Starts.
int main()
{
int t;
cin>>t;
while(t--)
{
string s;
cin>>s;
Solution ob;
cout<<ob.atoi(s)<<endl;
}
} // } Driver Code Ends