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

구현 내용은 다음과 같다.

[알고리즘]
1. 변환하고자 하는 문자열을 가져온다.
2. 문자열을 첫 지점부터 '\0'를 만날때 까지 각 자리 문자를 체크하며 이때 해당 문자는 '0' 보다 크고
    '9'보다 작아야 한다.
    [조건] 문자 != '\0' && (문자 >= '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 != '\0' && (*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를 반환하게된다.

'Program Language > C&C++ Language' 카테고리의 다른 글

atoi 구현..  (1) 2008.05.19
error LNK2001: unresolved external symbol __endthreadex  (0) 2007.06.22