The key idea is how to detect integer overflow, it’s same to: LeetCode101: 7. Reverse Integer.

class Solution {
public:
	int myAtoi(string s) {
		auto iter = s.begin();
		int base = 1, r = 0, p = 0;

		// Skip whitespace
		for (; iter != s.end() && *iter == ' '; ++iter) {
		}

		// negative or positive
		if (*iter == '-' || *iter == '+') {
			if (*iter == '-') {
				base = -1;
			}
			++iter;
		}

		for (; iter != s.end(); ++iter) {
			// failed at here: the logic between conditions is OR not AND
			if (*iter > '9' || *iter < '0') {
				break;
			}
			p = (*iter - '0') * base;
			// 7 is the INX_MAX's suffix, remember?
			if (r > INT_MAX / 10 || (r == INT_MAX / 10 && p > 7)) {
				return INT_MAX;
			}
			// 8 is the INT_MIN's suffix, too.
			if (r < INT_MIN / 10 || (r == INT_MIN / 10 && p < -8)) {
			   return INT_MIN;
			}
			r = r * 10 + p;
		}
		return r;
	}
};