C

atoi 구현

[출처] http://bluemir7.tistory.com/91

C 라이브러리에 보면
문자열을 숫자로 변환해주는 atoi 이라는 함수가 있다.
하지만 특정 시스템에 따라서는 해당 함수를 지원하지 않는 경우가 있는데
이때, atoi 함수를 구현하여 사용하여야 한다.
구현 방법 또한 단순하다. 단 지금 정리하는 구현 방법이 최적의 방법이라고 볼 수는
없을 것이다. 또 다른 방법이 존재할 지도…;;
구현 내용은 다음과 같다.

[알고리즘]
1. 변환하고자 하는 문자열을 가져온다.
2. 문자열을 첫 지점부터 ”를 만날때 까지 각 자리 문자를 체크하며 이때 해당 문자는 ‘0’ 보다 크고 ‘9’ 작아야 한다. [조건] 문자 != ” && (문자 >= ‘0’ && 문자 <= '9') 조건을 만족할 경우 '3' 으로 만족하지 않을 경우 '4'
3. 한자리 문자를 가져오며 다음 식에 의해 숫자 값으로 변환한다.
[식] y = ((int)x – (int)'0') + (10 * y)
x : 대상 문자
y : 변환된 숫자
다음 문자 처리를 위해 '2'으로..
4. 최종 변환됫 값을 반환한다.

[소스 코드]

int atoi(char * cTarget)
{

    int iChangeValue = 0;
    while (*cTarget != '' && (*cTarget >= '0' && *cTarget <= '9'))
    {
        // 현재 문자 변환시켜 기존에 있는 숫자에 더해준다.
        iChangeValue = (iChangeValue * 10) + ((int)*cTarget - (int)'0');
        cTarget++;   // 다음 문자로 이동
    }
    return iChangeValue;
}

위에서 ((int)*cTarget – (int)'0') 는 문자의 아스키 값을 숫자로 변환 했을때의 값을 계산하여
숫자로 치환 한것이다. 즉, *cTarget 값이 '1'이라면 '1'은 아스키 값이 49 이고 '0'은 아스키값이 48 이므로
49 -48을 하게되면 1이 반환된다.
(10 * iChangeValue) 이 부분은 기존 값을 한자리씩 앞으로 옮기는 역활을 담당한다.
즉, 현재 값이 2 이고 기존에 1이 있다면 (1 * 10) + 2 가 되므로 12를 반환하게된다

기본

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중