完美atoi,哈哈
/*
atoi算法,要求完美版
有两种,一种是用longlong,一种是真用int
“”
" "
“-”
“+”
“ -23”
“ +23”
“12a"
"abc"
越界情况
*/
#include <iostream>
using namespace std; //方法一用 long long 取巧
int atoi(const char * str,bool & flag)
{
long long result=;
int tmp;
int sign=;
if(str==NULL)
{
flag=false;
return ;
}
while(isspace(*str))
str++;
//if(*str=='\0')
//{
// flag=false;
// return 0;
//}
if(*str=='+'||*str=='-')
{
if(*str=='-')
sign=-;
str++;
}
if(*str=='\0') //” “和”+“ ,”-“的情况
{
flag=false;
return ;
}
while(*str>=''&&*str<='')
{
tmp=*str-'';
result=result*+tmp;
if(sign==-)
{
if(result->INT_MAX) //这里注意,如果是INT_MAX+1,系统或默认转换成int,导致越界,所以用result-1,result是longlong不会越界
{
result=INT_MAX+;
flag=false;
break;
}
}
else if(result>INT_MAX)
{
result=INT_MAX;
flag=false;
break;
}
str++;
}
if(*str=='\0')
flag=true;
else
flag=false;
return sign*result;
} //方法二 用int
int atoi2(const char * str ,bool & flag)
{
int result=;
int sign=;
int tmp;
int MAX_DIV=INT_MAX/;
int MAX_R=INT_MAX%;
int MIN_R=MAX_R+; //或者为MIN_R=-(INT_MIN%10); //如果用(INT_MAX+1)%10就错了,直接加的时候越界
int MIN_DIV=(INT_MAX)/; //july用的是max=(int)((unsigned)~0>>1);
//min_r=(int)(((unsigned)~0>>1+1)%10);
if(str==NULL)
{
flag=false;
return result;
}
while(isspace(*str))
str++;
if(*str=='+'||*str=='-')
{
if(*str=='-')
sign=-;
str++;
}
if(*str=='\0')
{
flag=false;
return result;
}
while(*str>=''&&*str<='')
{
int tmp=*str-'';
if(sign==)
{
if(result>MAX_DIV||(result==MAX_DIV&&tmp>MAX_R))
{
result=INT_MAX;
flag=false;
return result;
}
}
else if(result>MIN_DIV||(result==MIN_DIV&&tmp>MIN_R))
{
result=INT_MIN; //result直接为最小-2147483648,直接返回了
flag=false;
return result;
}
result=result*+tmp;
str++;
}
if(*str=='\0')
flag=true;
else
flag=false;
return sign*result;
} int main()
{
char * str[]={""," ","abc",""," -1234"," +34"," 12bc","+","-","+++","","","+2147483648","-2147483648","-2147483649","+12123131312432342"," -122323434534534654"};
//cout<<INT_MAX<<endl;
int n=;
bool flag;
for(int i=;i<n;i++)
{
int tmp=atoi2(str[i],flag);
if(tmp==)
{
if(flag==false)
cout<<str[i]<<" 错误数据转换为: "<<tmp<<endl;
else
cout<<str[i]<<" 转换为: "<<tmp<<endl;
}
else
{
cout<<str[i]<<" 转换为: "<<tmp<<endl;
}
}
system("pause");
}
完美atoi,哈哈的更多相关文章
- libcurl使用easy模式阻塞卡死等问题的完美解决
引言: 由于要在android手机测进行DM开发, 其中最重要的就是FUMO和SCOMO下载, 下载使用的是linux开源库libcurl. 于是就把libcurl的使用研究了一遍, 有些心得, 并解 ...
- 代码的坏味道(22)——不完美的库类(Incomplete Library Class)
坏味道--不完美的库类(Incomplete Library Class) 特征 当一个类库已经不能满足实际需要时,你就不得不改变这个库(如果这个库是只读的,那就没辙了). 问题原因 许多编程技术都建 ...
- Visual Studio Code,完美的编辑器
今日凌晨,微软的文本(代码)编辑器 Visual Studio Code(简称 VS Code),发布了首个正式版,距离首个 beta 版上线时间刚好一年. 在十多年的编程经历中,我使用过非常多的的代 ...
- 完美解决,浏览器下拉显示网址问题 | 完美解决,使用原生 scroll 写下拉刷新
在 web 开发过程中我们经常遇到,不想让用户下拉看到我的地址,也有时候在 div 中没有惯性滚动,就此也出了 iScroll 这种关于滚动条的框架,但是就为了一个体验去使用一个框架好像又不值得,今天 ...
- 浏览器自动刷新——基于Nodejs的Gulp LiveReload与VisualStudio完美结合。
本文版权桂博客园和作者吴双共同所有,转载和爬虫请注明原文地址 http://www.cnblogs.com/tdws/p/6016055.html 写在前面 大家好我是博客园的蜗牛,博客园的蜗牛就是我 ...
- HTML5 oninput实时监听输入框值变化的完美方案
在网页开发中经常会碰到需要动态监听输入框值变化的情况,如果使用 onkeydown.onkeypress.onkeyup 这个几个键盘事件来监测的话,监听不了右键的复制.剪贴和粘贴这些操作,处理组合快 ...
- 【repost】JavaScript完美运动框架的进阶之旅
运动框架的实现思路 运动,其实就是在一段时间内改变left.right.width.height.opactiy的值,到达目的地之后停止. 现在按照以下步骤来进行我们的运动框架的封装: 匀速运动. 缓 ...
- [LeetCode] Perfect Rectangle 完美矩形
Given N axis-aligned rectangles where N > 0, determine if they all together form an exact cover o ...
- [LeetCode] String to Integer (atoi) 字符串转为整数
Implement atoi to convert a string to an integer. Hint: Carefully consider all possible input cases. ...
随机推荐
- POJ1182并查集
食物链 时间限制:1000 ms | 内存限制:65535 KB 难度:5 描述 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物, ...
- PHP学习笔记(1) - 开发环境搭建
运行环境:phpstudy 它基本包括运行php应用需要的一切,php. apache.mysql,一键傻瓜安装 装好之后只需要配置虚拟主机和修改host文件就可以支持多站点 下载: http://w ...
- Delphi XE2及以后的版本编译后的程序大小问题
说说Delphi XE2及以后的版本编译后的程序大小问题. 其实最终得到的程序并不大,由于编译器的变化,XE2里Debug版程序比Release版程序大很多,要减小程序体积,就使用Release版.下 ...
- hdu 5654 xiaoxin and his watermelon candy 树状数组维护区间唯一元组
题目链接 题意:序列长度为n(1<= n <= 200,000)的序列,有Q(<=200,000)次区间查询,问区间[l,r]中有多少个不同的连续递增的三元组. 思路:连续三元组-& ...
- codeforce #339(div2)C Peter and Snow Blower
Peter and Snow Blower 题意:有n(3 <= n <= 100 000)个点的一个多边形,这个多边形绕一个顶点转动,问扫过的面积为多少? 思路:开始就认为是一个凸包的问 ...
- 【toplink】 位居第一的Java对象关系可持续性体系结构
TopLink,是位居第一的Java对象关系可持续性体系结构,原署WebGain公司的产品,后被Oracle收购,并重新包装为Oracle AS TopLink.TOPLink为在关系数据库表中存储 ...
- ASP.NET MVC Spring.NET NHibernate 整合
请注明转载地址:http://www.cnblogs.com/arhat 在整合这三个技术之前,首先得说明一下整合的步骤,俗话说汗要一口一口吃,事要一件一件做.同理这个三个技术也是.那么在整合之前,需 ...
- iOS崩溃日志分析-b
1名词解释 1.1. UUID 一个字符串,在iOS上每个可执行文件或库文件都包含至少一个UUID,目的是为了唯一识别这个文件. 1.2. dwarfdump 苹果提供的命令行工具,其中一些功能就是查 ...
- SmartGit初步使用
在Git如日中天的今天,我也不免俗的想用Git将业余时间写的代码管理一下. 什么是Git这里不多说,具体见廖雪峰的Git教程,ProGit等详细教程. 我们这里直接上手. 一.下载Git客户端 1.G ...
- Ubutn14.04下caffeine工具不显示在工具栏中的问题
安装过程请参考Ubuntu 14.04下安装Caffeine 2.6.2 阻止显示器进入睡眠状态 至于为什么不显示在任务栏,这不是程序的bug,你可以平ps -e看一下,任务已经在运行. 其实这是新版 ...