atoi() function

atoi() 는 다음과 같은 원형을 가진다.

/* atoi : convert s to integer */
int atoi(char s[])
{
	int i, n;

	n = 0;
	for (i = 0; s[i] >= '0' && s[i] <= '9'; ++i)
		n = 10 * n + (s[i] - '0');

	return n;
}
n = 10 * n + (s[i] - '0');

문자열을 Integer 형으로 변환하기 때문에 많은 방법이 존재할 수 있다.
하지만, 라이브러리를 통해 제공되는 atoi() 함수는 위와 같이 색다른 방법을 사용하고 있다.

각 자리의 수를 매번 계산하여 10의 자리로 곱을 하게 되므로 결과적으로 원하는 결과를 얻게 되는 것이다.
위 함수에서 알 수 있는 또 다른 사실은 for문 안의 조건 비교에서 숫자로 이루어져야만 for 문의 내용을 수행한다는 것이다.

따라서, 문자로 이루어진 데이터나 문자로 시작하는 데이터를 입력하게 되면 n의 초기값인 0 이 반환되게 된다.
하지만, "12c" 와 같이 숫자로 시작하다 중간에 문자가 있는 경우는 소스 코드에서도 알 수 있듯이 맨 앞부터 연속된 숫자인 "12"만 출력되게 된다.



신고
Posted by Proneer

댓글을 달아 주세요


티스토리 툴바