面试:atoi和itoa的实现
2024-09-28 10:29:05
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;
}
最新文章
- python中的enumerate
- Lining.js - 为CSS提供 ::nth-Line 选择器功能
- Ubuntu下修改system.img 解包system.img、打包system.img
- Debian安装中文输入法
- BZOJ-2186 沙拉公主的困惑 线性筛(筛筛筛)+线性推逆元
- 10324 - Zeros and Ones
- Memcache Slab Eviction 功能测试
- 索信达携手8Manage,打造项目管理系统信息化体系
- kubernetes进阶之五:Replication Controller&;Replica Sets&;Deployments
- IIS虚拟目录内的视频文件访问出错:HTTP 错误 404.3 - Not Found 由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理程序。如果应下载文件,请添加 MIME 映射。
- Python学习笔记(1)-列表
- ABAQUS粘弹性边界及地震荷载施加的简单实现(Matlab生成input文件)
- 完善:HTML5表单新特征简介与举例——张鑫旭
- 思维导图_Python_内置函数
- JPA error org.hibernate.AnnotationException: No identifier specified for entity
- php juery ajax 传值
- 20145316许心远《Java学习笔记》第三周总结
- Android MVC,MVP,MVVM模式入门——重构登陆注册功能
- 使用sigaction来取代signal作为信号处理器函数
- android 文件上传,中文utf-8编码
热门文章
- 20169207《Linux内核原理与分析》第五周作业
- 通过domoticz restful接口更新数据 c# 控制台程序
- noip第6课作业
- mysql_变量
- 《计算机科学基础》学习笔记_Part 1 Computer and Data
- <;c:forEach varStatus=";status";>;中 varStatus的属性简介
- brctl命令
- Delphi程序带参数运行
- Android-Kotlin简单计算器功能
- Android-Recyclerview-GridView&;瀑布流等效果