47 lines
1.9 KiB
C++
47 lines
1.9 KiB
C++
#include <string>
|
|
#include <iostream>
|
|
#include <cctype>
|
|
|
|
/**
|
|
* 8. String to Integer
|
|
* Implement the myAtoi(string s) function, which converts a string to a 32-bit signed integer (similar to C/C++'s atoi function).
|
|
* The algorithm for myAtoi(string s) is as follows:
|
|
* Read in and ignore any leading whitespace.
|
|
* Check if the next character (if not already at the end of the string) is '-' or '+'. Read this character in if it is either. This determines if the final result is negative or positive respectively. Assume the result is positive if neither is present.
|
|
* Read in next the characters until the next non-digit character or the end of the input is reached. The rest of the string is ignored.
|
|
* Convert these digits into an integer (i.e. "123" -> 123, "0032" -> 32). If no digits were read, then the integer is 0. Change the sign as necessary (from step 2).
|
|
* If the integer is out of the 32-bit signed integer range [-231, 231 - 1], then clamp the integer so that it remains in the range. Specifically, integers less than -231 should be clamped to -231, and integers greater than 231 - 1 should be clamped to 231 - 1.
|
|
* Return the integer as the final result.
|
|
* Note:
|
|
* Only the space character ' ' is considered a whitespace character.
|
|
* Do not ignore any characters other than the leading whitespace or the rest of the string after the digits.
|
|
*/
|
|
|
|
class Solution {
|
|
public:
|
|
static int myAtoi(const std::string& s) {
|
|
long long ret = 0;
|
|
int sgn = 1, pos = 0;
|
|
for (; std::isspace(s[pos]); ++pos);
|
|
if (s[pos] == '-')
|
|
sgn = -sgn;
|
|
if (s[pos] == '-' || s[pos] == '+')
|
|
++pos;
|
|
for (; std::isdigit(s[pos]); ++pos) {
|
|
ret = (ret << 3) + (ret << 1) + (s[pos] ^ 48);
|
|
if (ret > INT32_MAX)
|
|
break;
|
|
}
|
|
ret *= sgn;
|
|
if (ret < INT32_MIN)
|
|
return INT32_MIN;
|
|
else if (ret > INT32_MAX)
|
|
return INT32_MAX;
|
|
return int(ret & 0xFFFFFFFFLL);
|
|
}
|
|
};
|
|
|
|
int main() {
|
|
std::cout << Solution::myAtoi("42");
|
|
return 0;
|
|
} |