File tree Expand file tree Collapse file tree 3 files changed +83
-0
lines changed
solution/0000-0099/0008.String to Integer (atoi) Expand file tree Collapse file tree 3 files changed +83
-0
lines changed Original file line number Diff line number Diff line change @@ -356,6 +356,35 @@ class Solution {
356356}
357357```
358358
359+ #### C++
360+ ``` c++
361+ class Solution {
362+ public:
363+ int myAtoi(string s) {
364+ int i = 0, n = s.size();
365+ while (i < n && s[ i] == ' ')
366+ ++i;
367+
368+ int sign = 1;
369+ if (i < n && (s[ i] == '-' || s[ i] == '+')) {
370+ sign = s[ i] == '-' ? -1 : 1;
371+ ++i;
372+ }
373+
374+ int res = 0;
375+ while (i < n && isdigit(s[i])) {
376+ int digit = s[i] - '0';
377+ if (res > INT_MAX / 10 || (res == INT_MAX / 10 && digit > INT_MAX % 10)) {
378+ return sign == 1 ? INT_MAX : INT_MIN;
379+ }
380+ res = res * 10 + digit;
381+ ++i;
382+ }
383+ return res * sign;
384+ }
385+ };
386+ ```
387+
359388<!-- tabs:end -->
360389
361390<!-- solution:end -->
Original file line number Diff line number Diff line change @@ -352,6 +352,35 @@ class Solution {
352352}
353353```
354354
355+ #### C++
356+ ``` c++
357+ class Solution {
358+ public:
359+ int myAtoi(string s) {
360+ int i = 0, n = s.size();
361+ while (i < n && s[ i] == ' ')
362+ ++i;
363+
364+ int sign = 1;
365+ if (i < n && (s[ i] == '-' || s[ i] == '+')) {
366+ sign = s[ i] == '-' ? -1 : 1;
367+ ++i;
368+ }
369+
370+ int res = 0;
371+ while (i < n && isdigit(s[i])) {
372+ int digit = s[i] - '0';
373+ if (res > INT_MAX / 10 || (res == INT_MAX / 10 && digit > INT_MAX % 10)) {
374+ return sign == 1 ? INT_MAX : INT_MIN;
375+ }
376+ res = res * 10 + digit;
377+ ++i;
378+ }
379+ return res * sign;
380+ }
381+ };
382+ ```
383+
355384<!-- tabs:end -->
356385
357386<!-- solution:end -->
Original file line number Diff line number Diff line change 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+ };
You can’t perform that action at this time.
0 commit comments