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 Language' 카테고리의 다른 글
error LNK2001: unresolved external symbol __endthreadex (0) | 2007.06.22 |
---|