String to Integer (atoi) ???
#define INT_MAX 2147483647
#define INT_MIN -2147483648
class Solution {
public:
int atoi(const char *str) {
//string如果能转换成int的话,各位都要是数字,一个例外是第一个字符可以是负号
int n=strlen(str);
int i=0;
int flag=0;//0表示正值,1表示负值
int val=0;
/*
if(str[0]=='-')
{
i=1;
flag=1;
}
else if(str[0]=='+')//1、好吧,我承认刚开始我只记得负号要单独判断,忘记了正号了,~~~~(>_<)~~~~
{
i=1;
}
//2、好吧,我服了,还有空格,我也都没有考虑,空格可能出现的位置:开头,中间,结尾
//3、我彻底服了,空格在开头和结尾还不能够一视同仁呀,因为" -123"~~~~(>_<)~~~~
*/
//这个是专门处理开头空格滴
/*
while(i<n)
{
if(str[i]==' ')
++i;
else if(str[i]=='-')
{
++i;
flag=1;
break;
}
else if(str[i]=='+')
{
++i;
break;
}
}
*///一直显示超时,调试才发现这里是个死循环,晕
while(i<n)
{
if(str[i]==' ')
++i;
else if(str[i]=='-')
{
++i;
flag=1;
break;
}
else if(str[i]=='+')
{
++i;
break;
}
else
break;
}
while(i<n)
{
//if(str[i]==' ') //其实字符串中间有空格的话,算是能转为int呀还是不能转为int呀,纠结,我的写法是算是能转了
//++i;//如果用for时,因为后面已经++i了,所以这里应该是空操作,不能再写++i了
//Input:" -0012a42" Output:0 Expected:-12 测试用例的意思是,把能返回的第一串都给返回了
//if(str[i]<'9'&&str[i]>'0') //写错了吧
if(str[i]<='9'&&str[i]>='0')
{
//val=val*10+str[i];
val=val*10+(str[i]-'0');
++i;//这里用的是while,所以这里要手动++i;
}
else
{
//return 0;//如果字符串不能转换为int的话,返回什么呀,这个很纠结呀,提交的错误用例说明返回值应该是0
break;
}
}
if(flag)
val=-val;
//Input: "2147483648" Expected: 2147483647
// If the correct value is out of the range of representable values, INT_MAX (2147483647) or INT_MIN (-2147483648) is returned.
if(flag==0&&val<)//判断是否溢出
return INT_MAX;
else if(flag==1&&val>0)
return INT_MIN;
else
return val;
}
};
刚开始我没有看提示,直接做的,然后就各种错呀
Requirements for atoi:
The function first discards as many whitespace characters as necessary until the first non-whitespace character is found. Then, starting from this character, takes an optional initial plus or minus sign followed by as many numerical digits as possible, and interprets them as a numerical value. The string can contain additional characters after those that form the integral number, which are ignored and have no effect on the behavior of this function. If the first sequence of non-whitespace characters in str is not a valid integral number, or if no such sequence exists because either str is empty or it contains only whitespace characters, no conversion is performed. If no valid conversion could be performed, a zero value is returned. If the correct value is out of the range of representable values, INT_MAX (2147483647) or INT_MIN (-2147483648) is returned.
Submission Result: Wrong Answer
| Input: | " 10522545459" |
| Output: | 1932610867 |
| Expected: | 2147483647 |
说明我的溢出判断那个地方写的不对,对于这道题目来说,怎么判断溢出,什么时候判断溢出,我觉得如果在最后判断溢出是不好的,因为输入的是字符串,不能知道它的int值是多少就不能和之后出来的值比较,所以判断溢出应该是在转换的过程中判断的,至于具体怎么做,我想不到,看看别人是怎么写的吧:http://blog.csdn.net/ithomer/article/details/8800530
class Solution {
public:
int atoi(const char *str) {
int i=;
int n=strlen(str);
int flag=;
int value=;
int digit=;
while(*str!='\0')
{
if(*str==' ')
{
str++;
}
else if(*str=='-')
{
flag=;
str++;
break;
}
else if(*str=='+')
{
str++;
break;
}
else
{
break;
}
}
while(*str!='\0')
{
if(*str<=''&&*str>='')
{
digit=*str-'';
//要满INT_MIN<=val*10+digit<=INT_MAX
if(flag==&&value>(INT_MAX-digit)/)
return INT_MAX;
//else if(value<(INT_MIN-digit)/10)//负值不能这么算
else if(flag==&&value>(-INT_MIN-digit)/)
return INT_MIN;
else
{
value=value*+digit;
str++;
}
}
else
{
break;
}
}
if(flag)
value=-value;
return value;
}
};
Submission Result: Wrong Answer
| Input: | " -00134" |
| Output: | -2147483648 |
| Expected: | -134 |
不明真相,我在codeblocks中跑了代码,输入" -00134",输出的就是-134,不知道到底是怎么回事
String to Integer (atoi) ???的更多相关文章
- Kotlin实现LeetCode算法题之String to Integer (atoi)
题目String to Integer (atoi)(难度Medium) 大意是找出给定字串开头部分的整型数值,忽略开头的空格,注意符号,对超出Integer的数做取边界值处理. 方案1 class ...
- 【leetcode】String to Integer (atoi)
String to Integer (atoi) Implement atoi to convert a string to an integer. Hint: Carefully consider ...
- No.008 String to Integer (atoi)
8. String to Integer (atoi) Total Accepted: 112863 Total Submissions: 825433 Difficulty: Easy Implem ...
- leetcode第八题 String to Integer (atoi) (java)
String to Integer (atoi) time=272ms accepted 需考虑各种可能出现的情况 public class Solution { public int atoi( ...
- leetcode day6 -- String to Integer (atoi) && Best Time to Buy and Sell Stock I II III
1. String to Integer (atoi) Implement atoi to convert a string to an integer. Hint: Carefully con ...
- String to Integer (atoi) - 字符串转为整形,atoi 函数(Java )
String to Integer (atoi) Implement atoi to convert a string to an integer. [函数说明]atoi() 函数会扫描 str 字符 ...
- LeetCode--No.008 String to Integer (atoi)
8. String to Integer (atoi) Total Accepted: 112863 Total Submissions: 825433 Difficulty: Easy Implem ...
- leetcode-algorithms-8 String to Integer (atoi)
leetcode-algorithms-8 String to Integer (atoi) Implement atoi which converts a string to an integer. ...
- LeetCode: String to Integer (atoi) 解题报告
String to Integer (atoi) Implement atoi to convert a string to an integer. Hint: Carefully consider ...
- 《LeetBook》leetcode题解(8): String to Integer (atoi) [E]——正负号处理
我现在在做一个叫<leetbook>的免费开源书项目,力求提供最易懂的中文思路,目前把解题思路都同步更新到gitbook上了,需要的同学可以去看看 书的地址:https://hk029.g ...
随机推荐
- Android中Application是什么?
Application是什么? Application和Activity,Service一样,是android框架的一个系统组件,当android程序启动时系统会创建一个 application对象, ...
- android 删除SD卡或者手机的缓存图片和目录
public static final String TEMP_PHOTO_FILE_NAME = "temp_photo.jpg"; private static String ...
- 基于用户登陆的struts2中action的分类详解
在struts2中action的分类有:继承 ActionSupport 实现 Action,模型驱动(ModelDriven)的 Action,多方法的 Action三种方式. 1.继承 Actio ...
- Problem: Query on the tree(二分+划分树)
题目链接: Problem: Query on the tree Time limit: 1s Mem limit: 64 MB Problem Description There ...
- MySQL auto_increment介绍 以及 查询和修改auto_increment的方法
一.auto_increment使用方法 .创建table时设置auto_increment属性和初始值100 create table nonove ( id bigint unsigned not ...
- 如何突破JAVA程序员三年的门槛
第一阶段:三年 我认为三年对于程序员来说是第一个门槛,这个阶段将会淘汰掉一批不适合写代码的人.这一阶段,我们走出校园,迈入社会,成为一名程序员,正式从书本 上的内容迈向真正的企业级开发.我们知道如何团 ...
- Andriod部分手机频繁闪退,vivo y55a等,Skipped 62 frames! The application may be doing too much work on its main thread
问题描述: 部分手机频繁闪退的问题.比如:vivo y55a,在升级.交任务.穿戴装备等都有概率闪退... 表现: 卡几帧就马上闪退. 在学习技能.穿戴装备.升级等概率出现,新角色第3个任务“拦截少年 ...
- window如何分区
WD官方技术支持电话:800热线800-820-6682(请于周一至周五工作日期间使用固定电话拨打,不支持手机用户)手机用户请拨打400-627 6682. 链接:https://kuyusm.tma ...
- asp.net core mcroservices 架构之 分布式日志(三):集成kafka
一 kafka介绍 kafka是基于zookeeper的一个分布式流平台,既然是流,那么大家都能猜到它的存储结构基本上就是线性的了.硬盘大家都知道读写非常的慢,那是因为在随机情况下,线性下,硬盘的读写 ...
- 深入理解vsto,开发word插件的利器
开发了vsto,客户那边也有一些反映插件安装失败或者加载不上的情况.于是我下定决定再理解下vsto的工作机制,如下图: 如上图所示,我把vsto的解决方案分为两部分,一部分是vsto Add-ins, ...