atoi 라 이브 러 리 함수 작성

7693 단어 함수.
많은 면접 서 와 블 로그 에서 아 토 이 함수 작성 에 대해 언급 하 는 것 을 보 았 습 니 다. 많은 면접 에서 면접 관 들 은 지원자 에 게 즉석에서 아 토 이 함수 의 실현 코드 를 쓰 라 고 요구 하지만 정확 하 게 쓸 수 있 는 사람 은 거의 없습니다. 이 문제 가 얼마나 깊 은 알고리즘 이 있 는 지, 얼마나 복잡 한 데이터 구조 가 있 는 지 는 아 닙 니 다. 이 문 제 를 고려 해 야 할 상황 이 많 기 때 문 입 니 다.대부분의 지원자 들 은 모든 상황 을 고려 하지 못 하고 지원자 의 프로 그래 밍 기본기 와 사고 문제 의 전면 성 등 능력 을 잘 살 펴 본다.이 문 제 를 보 자마자 나의 첫 반응 은 이렇게 간단 했다. 한 문자열 을 정수 로 바 꾸 는 것 이 아니 냐?그리고 속도 로 실현 코드 를 적 고 테스트 를 해 보 니 결과 도 정확 한 것 같 았 다. 그리고 책 과 블 로그 의 실현 을 보 니 여러 가지 상황 이 고려 되 지 않 았 고 자신 이 테스트 한 것 도 자신 이 생각 하 는 한두 가지 상황 일 뿐 이 었 다.
이 문 제 는 고려 해 야 할 상황 이 정말 많다. 예 를 들 어 전 달 된 문자열 포인터 가 NULL 이면;전 달 된 문자열 이 비어 있 으 면;전 송 된 문자열 에 불법 문자 가 포함 되 어 있다 면;전 달 된 문자열 에 + - 기호 가 포함 되 어 있다 면;만약 문자열 이 대표 하 는 정수 가 정수 가 표시 할 수 있 는 범 위 를 초과 한다 면.............................................................................
 1 int myError = 0;
 2 
 3 int atoi(const char *str)
 4 {
 5     bool is_f = false;
 6     long long result = 0;
 7 
 8     myError = 0;
 9     if (str == NULL || *str == 0)
10     {
11         myError = -1;
12         return 0;
13     }
14     if (*str == '+' || *str == '-')
15     {
16         if (*str == '-')
17             is_f = true;
18         ++str;
19         if (*str == 0)
20         {
21             myError = -1;
22             return 0;
23         }
24     }
25     while (*str)
26     {
27         if (!(*str >= '0' && *str <= '9') ||
28             (!is_f && result > 0x7fffffff)
29             || (is_f && result > 0x80000000))
30         {
31             myError = -1;
32             return 0;
33         }
34         result = result * 10 + (*str - '0');
35         ++str;
36     }
37     if((!is_f && result > 0x7fffffff)
38         || (is_f && result > 0x80000000))
39     {
40         myError = -1;
41         return 0;
42     }
43     return is_f ? -((int)result) : (int)result;
44 }

위의 코드 는 잘못된 코드 를 my Error 전역 변수 에 저장 합 니 다. 반환 값 으로 오 류 를 표시 하면 문자열 이 대표 하 는 전체 수치 와 헷 갈 릴 수 있 기 때 문 입 니 다.위의 코드 는 위 에 적 힌 여러 가지 상황 에 대응 하 는 것 처럼 스스로 테스트 했 지만 코드 의 질 이 높 지 않 아 붙 여 공유 만 할 수 있 고 아직 고려 하지 않 은 상황 이 있 을 수 있 습 니 다.

좋은 웹페이지 즐겨찾기