面试:atoi和itoa的实现
1.int atoi(const char* src)
- nullptr指针
- 空白字符' ','\t','\n'
- 符号位
- 避免值溢出
- 出错信息保存在全局变脸errnum中
int errnum = ;
int atoi(const char* src){
if(src == nullptr) {
errnum = -; //empty string
return ;
} //remove whitespace characters.
while(*src == ' ' || *src == '\t' || *src == '\n'){
src++;
} int sign = ;
if(*src == '+'){
src++;
}else if(*src == '-'){
sign = -;
src++;
}
//only with sign bit
if(*src == '\0') {
errnum = -;
return ;
} long long res = ;
while(*src != '\0'){
if(*src >= '' && *src <= ''){
res = res * + *src - '';
if((sign == && res > 0x7fffffff) || (sign == - && (-*res) < (int)0x80000000)){
errnum = -; //out of range
return ;
}
}else{
errnum = -; //illegal character
return ;
}
src++;
}
return sign*res;
}
2. char* itoa(int val,char* buf,size_t radix)
- 指针有效性判断
- 符号位
- 基数(10,16,2进制)
- reverse操作
char* itoa(int val,char* buf,size_t radix){
assert(buf != nullptr);
char* p = buf;
if(val < ){
*p++ = '-';
val = - * val;
} int a = ;
do{
a = val % radix;
val /= radix;
if(a > ){
*p++ = char(a-+'a');
}else{
*p++ = (char)(a + '');
}
}while(val != ); *p = '\0';
//reverse
size_t len = strlen(buf);
int left = ;
if(*buf == '-' || *buf == '+'){
left++;
}
int right = len - ;
while(left < right){
swap(buf[left++],buf[right--]);
}
return buf;
}
面试:atoi和itoa的实现的更多相关文章
- 面试:atoi() 与 itoa()函数的内部实现(转)
原 面试:atoi() 与 itoa()函数的内部实现 2013年04月19日 12:05:56 王世晖 阅读数:918 #include <stdio.h> #include < ...
- atoi 和 itoa的实现
atoi 和 itoa是面试笔试经常要考到的题目,下面两份代码是用C语言实现的atoi和itoa: 1, atoi 原型: int atoi(const char *nptr); 函数说明: 参数np ...
- atoi 和 itoa
转自:http://www.cnblogs.com/cobbliu/archive/2012/08/25/2656176.html atoi 和 itoa是面试笔试经常要考到的题目,下面两份代码是用C ...
- atoi、itoa,strcpy,strcmp,memcpy等实现
原文:http://www.cnblogs.com/lpshou/archive/2012/06/05/2536799.html 1.memcpy.memmove.memset源码 link:http ...
- c常用函数-atoi 和 itoa
atoi 和 itoa atoi的功能是把一个字符串转为整数 Action(){ int j; char *s=""; j = atoi(s); lr_output_message ...
- 工作的准备:atoi,itoa,strcpy,memcpy,strcmp,二分查找,strcat
对常见的几个函数,周末没事写写,绝对是笔试面试中非频繁,前面n届学长无数次强调了,大家就别怀疑了.从今天开始,每天10道题. int atoi(const char* str) { if(str==N ...
- C函数的实现(strcpy,atoi,atof,itoa,reverse)
在笔试面试中经常会遇到让你实现C语言中的一些函数比如strcpy,atoi等 1. atoi 把字符串s转换成数字 int Atoi( char *s ) { int num = 0, i = 0; ...
- c++实现atoi()和itoa()函数(字符串和整数转化)
(0) c++类型所占的字节和表示范围 c 语言里 类型转换那些事儿(补码 反码) 应届生面试准备之道 最值得学习阅读的10个C语言开源项目代码 一:起因 (1)字符串类型转化为整数型(Integer ...
- [转载]C函数的实现(strcpy,atoi,atof,itoa,reverse)
在笔试面试中经常会遇到让你实现C语言中的一些函数比如strcpy,atoi等 1. atoi 把字符串s转换成数字 int Atoi( char *s ) { , i = ; ; ; isspace( ...
随机推荐
- Linux CentOS 5.5 服务器安装图文教程
下面开始: 系统版本:CentOS 5.5 将镜像刻成光盘,设置BIOS将CDROM设置为第一启动 启动画面: 通过提示,按ENTER进入图形安装模式(E文不好的,赶紧补习去哈~~~) 我们按ENTE ...
- php apache
php与Apache配置基础知识 1.在 AllowOverride 设置为 None 时,.htaccess 文件将被完全忽略.当此指令设置为All时,所有具有“.htaccess” 作用域的指令都 ...
- poj 3321 单点更新 区间求和
Apple Tree Time Limit: 2000 MS Memory Limit: 65536 KB 64-bit integer IO format: %I64d , %I64u Java c ...
- Android-Java控制多线程执行顺序
功能需求: Thread-0线程:打印 1 2 3 4 5 6 Thread-1线程:打印1 1 2 3 4 5 6 先看一个为实现(功能需求的案例) package android.java; // ...
- 二、基于kubernetes构建Docker集群环境实战
kubernetes是google公司基于docker所做的一个分布式集群,有以下主件组成 etcd: 高可用存储共享配置和服务发现,作为与minion机器上的flannel配套使用,作用是使每台 m ...
- WinDbg探究CLR底层(1) - 应用程序域
一.什么是应用程序域 操作系统由于其稳定性与可靠性的要求,都会使用隔离层,来确保运行在某个隔离层内的代码不会对其他隔扇层的代码产生影响.如Windows通过进程来实现这种隔离机制,所能的可执行代码.数 ...
- c#中的几种Dialog
1.OpenFileDialog private void FileOpen_Click(object sender, EventArgs e) { OpenFileDialog openFile = ...
- 【CF600E】 Lomsat gelral
CF600E Lomsat gelral Solution 考虑一下子树的问题,我们可以把一棵树的dfn序搞出来,那么子树就是序列上的一段连续的区间. 然后就可以莫队飞速求解了. 但是这题还有\(\T ...
- jmeter 中 浮点数计算精度问题
jmeter 中 浮点数计算精度问题解决方法: 编写 beanshell 时使用 java.math.BigDecimal 方法构造,使用 BigDecimal 并且一定要用 String 来够造. ...
- [NOI2017]蔬菜(贪心)
神仙题啊! 早上开了两个多小时,终于肝出来了,真香 我们考虑从第 \(10^5\) 天开始递推,先生成 \(p=10^5\) 的解,然后逐步推出 \(p-1,...,2,1\) 的解. 那怎么推出 \ ...