atoi源码

面试中比较偏重基础的可能会考察到这一类的具体实现

是什么

atoi:将字符串转换为数字

如何处理

字符如何隐式的转换为数字:
一个char型的字符减去‘0’就会隐式的转换为数字,一个数字加上‘0’则会隐式的转换为字符,明白了这一点,就可以尝试着写atoi了

SourceCode – C语言

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
#include <assert.h>
#include <ctype.h>

long long int my_atoi(const char *c){
long long int value = 0;
int sign = 1;
if( *c == '+' || *c == '-' ){ //符号判断
if( *c == '-' ) sign = -1; //记录负数
c++;
}
while (isdigit(*c)){ //处理所有的数字,非数字字符会被过滤掉
value *= 10; //已经处理过的位左移(* 10实现)
value += (int) (*c-'0'); //加上心的位,通过-'0'实现
c++;
}
return (value * sign);
}

int main(void){
assert(5 == my_atoi("5"));
assert(-2 == my_atoi("-2"));
assert(-1098273980709871235 == my_atoi("-1098273980709871235"));
}

Powered by KyleCe

Copyright © 2015 - 2019 KyleCe All Rights Reserved.

访客数 : | 访问量 :