주제 링크
제목 설명:
atoi
함수 를 구현하러 오세요 . 문자열을 정수로 변환 할 수 있습니다.
첫째,이 함수는 공백이 아닌 첫 번째 문자를 찾을 때까지 필요에 따라 쓸모없는 시작 공백 문자를 버립니다. 다음과 같은 변환 규칙은 다음과 같습니다.
공백이 아닌 첫 번째 문자가 양수 또는 음수 부호 인 경우이 부호를 가능한 한 많은 연속 디지털 문자와 결합하여 부호있는 정수를 형성하십시오.
공백이 아닌 첫 번째 문자가 숫자 인 경우 다음 연속 숫자 문자와 직접 결합되어 정수를 형성합니다.
문자열에는 유효한 정수 부분 뒤에 추가 문자가있을 수도 있으므로 이러한 문자는 무시할 수 있으며 함수에 영향을주지 않아야합니다.
참고 : 문자열에서 공백이 아닌 첫 번째 문자가 유효한 정수 문자가 아니거나 문자열이 비어 있거나 문자열에 공백 문자 만 포함 된 경우 함수를 변환 할 필요가 없습니다. 즉, 효과적으로 변환 할 수 없습니다.
어쨌든 함수가 유효한 변환을 수행 할 수 없으면 0을 반환하십시오.
신속한:
이 질문의 공백 문자에는 공백 문자 만 포함됩니다 ' '
.
우리 환경이 32 비트 부호있는 정수만 저장할 수 있다고 가정하면 값 범위는 [−2 ^ 31, 2 ^ 31 − 1]입니다. 값이이 범위를 초과하면 INT_MAX (2 ^ 31-1) 또는 INT_MIN (-2 ^ 31)을 반환하십시오.
예 1 :
입력 : "42"
출력 : 42
예 2 :
입력 : "-42"
출력 : -42
설명 : 공백이 아닌 첫 번째 문자는 음수 부호 인 '-'입니다.
마이너스 기호를 모든 후속 숫자와 결합하기 위해 최선을 다하고 마지막으로 -42를 얻습니다.
예 3 :
입력 : "4193 with words"
출력 : 4193
설명 : 다음 문자가 숫자가 아니기 때문에 변환이 숫자 '3'에서 끝납니다.
예 4 :
입력 : "words and 987"
출력 : 0
설명 : 공백이 아닌 첫 번째 문자는 'w'이지만 숫자 나 양수 또는 음수 부호가 아닙니다.
따라서 효과적인 변환을 수행 할 수 없습니다.
예 5 :
입력 : "-91283472332"
출력 : -2147483648
설명 : 숫자 "-91283472332"가 부호있는 32 비트 정수 범위를 초과합니다.
따라서 INT_MIN (−2 ^ 31)이 반환됩니다.
신중한 시뮬레이션
이 질문에는 많은 상황이 고려되며 유일한 요구 사항은 인내심입니다. 과정은 다음과 같습니다.
- 공백이 아닌 첫 번째 문자가 나타날 때까지 문자열 시작 부분의 공백을 제거하십시오.
- 비어 있지 않은 첫 번째 문자가 숫자인지 기호
0
인지 판단하고 그렇지 않은 경우를 반환 하고 그렇다면 계속해서 기호인지 판단합니다. flag
식별자를 더하기 또는 빼기 기호로 설정하면 끝입니다result * flag
.- 다음 단계는 공백, 기호 또는 문자 (숫자 제외)를 만날 때까지 계속 판단하는 것입니다.
result = result * 10 + num
루프에서 문자열을 숫자로 변환합니다.- 아웃 외에 대해 잊지 마세요 경계 상황, 당신은
INT_MAX
할 수 가 축적 된 이후에 매번보다 큰지 여부를 판단 ,flag
다음은이 있는지 여부를 확인하기 위해 유용INT_MAX
또는이다INT_MIN
;
암호
class Solution {
public:
int myAtoi(string str) {
int indexNum = 0;
int len = str.size();
while(indexNum < len && str[indexNum] == ' ')
indexNum++;
if(indexNum == len || (str[indexNum] > 'A' && str[indexNum] <= 'z'))
return 0;
long long result = 0;
int flag = 1;
if(str[indexNum] == '-'){
flag = -1;
indexNum++;
}
else if(str[indexNum] == '+')
indexNum++;
while(indexNum < len && str[indexNum] >= '0' && str[indexNum] <= '9'){
int num = str[indexNum] - '0';
result = result * 10 + num;
indexNum++;
if(result > INT_MAX){
return (flag == -1) ? INT_MIN : INT_MAX;
}
}
return result * flag;
}
};
실수가 있거나 엄격하지 않은 경우 저를 바로 잡으십시오. 대단히 감사합니다.
내 블로그 : http://breadhunter.gitee.io