Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 8aca291

Browse files
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)

AltStyle によって変換されたページ (->オリジナル) /