信雅达面试题atoi函数实现
atoi函数:
名字来源:ASCII to integer 的缩写。
原型: int atoi(const char *nptr);
函数说明
参数nptr字符串,如果第一个非空格字符存在,是数字或者正负号则开始做类型转换,之后检测到非数字(包括结束符 \0) 字符时停止转换,返回整型数。否则,返回零,
1 #include <stdio.h>
2 #include <assert.h>
3 int is_digit(char ch)
4 {
5 if(ch >= '0' && ch <= '9')
6 return 1;
7 else
8 return 0;
9 }
10 int is_space(char ch)
11 {
12 if(ch == ' ' || '\n' == ch || '\t' == ch || '\r' == ch || '\b' == ch || '\f' == ch)
13 return 1;
14 else
15 return 0;
16 }
17
18 int my_atoi(const char *str)
19 {
20 assert(str);
21 int sum = 0;
22 char sign = '+';
23
24 while(is_space(*str++));
25
26 if(*str == '+' || *str == '-')
27 sign = *str++;
28
29 while(is_digit(*str))
30 {
31 sum = sum *10 + *str - '0';
32 str++;
33 }
34
35 if(sign == '-')
36 return -sum;
37 else
38 return sum;
39 }
40 int main()
41 {
42 printf("string: %d\n", my_atoi("+214"));
43 return 0;
44 }