영어로 읽는 코딩

10 [C] atoi

#include <stdio.h>
#include <ctype.h>
/*count digits, white space, others*/
int atoi(char[]);
int main(void)
{
    char ndigit[] = "     -34";
		printf("%d \n", atoi(ndigit));
	return 0;
}
int atoi(char s[]) {
	int i=0, n, sign;
	for (i = 0; isspace(s[i]); i++)   /* skip white space */
		;
	sign = (s[i] == '-') ? -1 : 1;
	if (s[i] == '+' || s[i] == '-')   /* skip sign */
		i++;
	for (n = 0; isdigit(s[i]); i++)
		n = 10 * n + (s[i] - '0');
	return sign * n;
}
/*The C Programming Language (second edition, Prentice Hall)
by Brian W. Kernighan and Dennis M. Ritchie*/

The structure of the program reflects the form of the input:

 

skip white space, if any

get sign, if any

get integer part and convert it

 

Each step does its part, and leaves things in a clean state for the next. The whole process terminates on the first character that could not be part of a number.

 

[The C Programming Language (second edition, Prentice Hall) by Brian W. Kernighan and Dennis M. Ritchie, p.61]

댓글

댓글 본문