Skip to content

Commit 8aca291

Browse files
authored
feat: add cpp solution to lc problem No.0008 (#4442)
1 parent 7c2ed94 commit 8aca291

File tree

3 files changed

+85
-8
lines changed

3 files changed

+85
-8
lines changed

solution/0000-0099/0008.String to Integer (atoi)/README.md

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,36 @@ class Solution {
214214
}
215215
```
216216

217+
#### C++
218+
219+
```cpp
220+
class Solution {
221+
public:
222+
int myAtoi(string s) {
223+
int i = 0, n = s.size();
224+
while (i < n && s[i] == ' ')
225+
++i;
226+
227+
int sign = 1;
228+
if (i < n && (s[i] == '-' || s[i] == '+')) {
229+
sign = s[i] == '-' ? -1 : 1;
230+
++i;
231+
}
232+
233+
int res = 0;
234+
while (i < n && isdigit(s[i])) {
235+
int digit = s[i] - '0';
236+
if (res > INT_MAX / 10 || (res == INT_MAX / 10 && digit > INT_MAX % 10)) {
237+
return sign == 1 ? INT_MAX : INT_MIN;
238+
}
239+
res = res * 10 + digit;
240+
++i;
241+
}
242+
return res * sign;
243+
}
244+
};
245+
```
246+
217247
#### Go
218248

219249
```go

solution/0000-0099/0008.String to Integer (atoi)/README_EN.md

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -160,19 +160,16 @@ class Solution:
160160
i = 0
161161
while s[i] == ' ':
162162
i += 1
163-
# 仅包含空格
164163
if i == n:
165164
return 0
166165
sign = -1 if s[i] == '-' else 1
167166
if s[i] in ['-', '+']:
168167
i += 1
169168
res, flag = 0, (2**31 - 1) // 10
170169
while i < n:
171-
# 非数字,跳出循环体
172170
if not s[i].isdigit():
173171
break
174172
c = int(s[i])
175-
# 溢出判断
176173
if res > flag or (res == flag and c > 7):
177174
return 2**31 - 1 if sign > 0 else -(2**31)
178175
res = res * 10 + c
@@ -190,17 +187,14 @@ class Solution {
190187
if (n == 0) return 0;
191188
int i = 0;
192189
while (s.charAt(i) == ' ') {
193-
// 仅包含空格
194190
if (++i == n) return 0;
195191
}
196192
int sign = 1;
197193
if (s.charAt(i) == '-') sign = -1;
198194
if (s.charAt(i) == '-' || s.charAt(i) == '+') ++i;
199195
int res = 0, flag = Integer.MAX_VALUE / 10;
200196
for (; i < n; ++i) {
201-
// 非数字,跳出循环体
202197
if (s.charAt(i) < '0' || s.charAt(i) > '9') break;
203-
// 溢出判断
204198
if (res > flag || (res == flag && s.charAt(i) > '7'))
205199
return sign > 0 ? Integer.MAX_VALUE : Integer.MIN_VALUE;
206200
res = res * 10 + (s.charAt(i) - '0');
@@ -210,6 +204,36 @@ class Solution {
210204
}
211205
```
212206

207+
#### C++
208+
209+
```cpp
210+
class Solution {
211+
public:
212+
int myAtoi(string s) {
213+
int i = 0, n = s.size();
214+
while (i < n && s[i] == ' ')
215+
++i;
216+
217+
int sign = 1;
218+
if (i < n && (s[i] == '-' || s[i] == '+')) {
219+
sign = s[i] == '-' ? -1 : 1;
220+
++i;
221+
}
222+
223+
int res = 0;
224+
while (i < n && isdigit(s[i])) {
225+
int digit = s[i] - '0';
226+
if (res > INT_MAX / 10 || (res == INT_MAX / 10 && digit > INT_MAX % 10)) {
227+
return sign == 1 ? INT_MAX : INT_MIN;
228+
}
229+
res = res * 10 + digit;
230+
++i;
231+
}
232+
return res * sign;
233+
}
234+
};
235+
```
236+
213237
#### Go
214238

215239
```go
@@ -282,8 +306,6 @@ const myAtoi = function (str) {
282306
#### C#
283307

284308
```cs
285-
// https://leetcode.com/problems/string-to-integer-atoi/
286-
287309
public partial class Solution
288310
{
289311
public int MyAtoi(string str)
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
class Solution {
2+
public:
3+
int myAtoi(string s) {
4+
int i = 0, n = s.size();
5+
while (i < n && s[i] == ' ')
6+
++i;
7+
8+
int sign = 1;
9+
if (i < n && (s[i] == '-' || s[i] == '+')) {
10+
sign = s[i] == '-' ? -1 : 1;
11+
++i;
12+
}
13+
14+
int res = 0;
15+
while (i < n && isdigit(s[i])) {
16+
int digit = s[i] - '0';
17+
if (res > INT_MAX / 10 || (res == INT_MAX / 10 && digit > INT_MAX % 10)) {
18+
return sign == 1 ? INT_MAX : INT_MIN;
19+
}
20+
res = res * 10 + digit;
21+
++i;
22+
}
23+
return res * sign;
24+
}
25+
};

0 commit comments

Comments
 (0)