1.leetcode-字符串处理函数atoi的书写
来源:互联网 发布:淘宝客服平台语言技巧 编辑:程序博客网 时间:2024/05/29 23:25
要注意的问题:
- 输入是空字符串返回0
- 输入是”0” 也要返回0
- 输入字符串前面可能有空格,如’ 10’
- 输入字符串如果溢出了:
- 如果向上溢出,则返回int类型最大值
- 如果向下溢出,则返回int类型最小值
- 如果输入“+21-” 则应该输出12 .我之前遇到非invalid的输入都输出的是-1(leetcode上需要输出0)
- 当输入是int类型最小的整数呢?
- 当输入是int类型最大的整数加1减1呢?
- 当输入比int类型的最小值加1,减1呢?
2.错误代码(记录error)
2.1 错误代码1
int _strToInt2(const char *str){ const int maxLimit= ((unsigned int)0-1)>>1; const int minLimit= maxLimit+1; //******************************************************************** int _size=strlen(str); //如果str是NULL,那么使用strlen会出现error if(str==NULL || _size==0){ cout<<"The string is empty or empty"<<endl; return 0; } //******************************************************************** int _size=strlen(str); bool res=true; bool signal=0; int sum=0; int i=0; if(str[0]=='+'){ ++i; }else if (str[0]=='-'){ ++i; signal=1; } while(res&&i<_size){ if( maxLimit<sum || sum<minLimit){ res=false; cout<<"over flow"<<endl; } if('0'<=str[i] && str[i]<='9'){ sum= sum*10+(str[i]-'0'); ++i; }else{ sum=0; res=false; } } if(signal) sum=-1*sum; if(!res){ return sum; } return (int)sum;}
错误地方如下:
在
//********************************************************************
之间的代码。原因是:
如果str是NULL,那么使用strlen会出现error.(如果最后一个字符不是’\0’结尾,你就不能使用strlen )下面代码
if( maxLimit<sum || sum<minLimit){ res=false; cout<<"over flow"<<endl;}
- error1:这段括号中的代码根本不会执行,因为如果 sum*10 溢出了,那么此时你比较的就是溢出后的值。
- error2: 这段代码执行后应该立即跳出循环,但是你写的并不会直接跳出,还要执行后面的语句
2.2 错误代码2
int _strToInt2(const char *str){ const int maxLimit= ((unsigned int)0-1)>>1; const int minLimit= maxLimit+1; if( str==NULL || *str=='\0'){ cout<<"The string is empty "<<endl; return 0; } int _size=strlen(str); bool res=true; bool signal=0; long int sum=0; int i=0; if(str[0]=='+'){ ++i; }else if (str[0]=='-'){ ++i; signal=1; } while(res&&i<_size){ if(maxLimit/10<sum){ sum=maxLimit; res=false; cout<<"over flow"<<endl; break; } if( sum<minLimit/10){ sum=minLimit; res=false; cout<<"over flow"<<endl; break; } if('0'<=str[i] && str[i]<='9'){ sum= sum*10+(str[i]-'0'); ++i; }else{ sum=0; res=false; } } if(signal) sum=-1*sum; if(!res){ return sum; } return sum;}
- 错误原因
- 如果输入的字符串前面有空格怎么办?
3.ledetcode 上通过代码
- C++
int myAtoi(string str) { if(str.empty()) { cout<<"string is empty"<<endl; return 0; } int MaxLimit=((unsigned int)0-1)>>1; int MinLimit=MaxLimit+1; bool sign=false; int i=0,res=0; while(i<str.size() && str[i]==' ') ++i; if(str[i]=='-') { ++i; sign=true; }else if(str[i]=='+'){ ++i; } while(i<str.size()) { int oldres=res; //cout<<s[i]<<endl; if( '0'<=str[i] && str[i]<='9' ) { res = res*10 + int(str[i]-'0'); }else{ break; } if(res/10!=oldres) { if(sign) res=MinLimit; else res=MaxLimit; break; } ++i; } if(sign) res=-1*res; return res; }
- python (仿制别人)
class Solution(object): def myAtoi(self, s): """ :type str: str :rtype: int """ if(len(s)==0): return 0 s=s.strip() l=list(s) sign=-1 if s[0]=='-' else 1 if(l[0] in ['+','-']): del l[0] r,i=0,0 while i<len(l) and l[i].isdigit() : r=r*10+int(l[i]) i=i+1 r=sign*r return min(max(-1*2**31,r),2**31-1)
0 0
- 1.leetcode-字符串处理函数atoi的书写
- 字符串转int型atoi函数-leetcode
- itoa、atoi 整型转字符串、字符串转整型的函数
- leetcode--8--实现atoi函数
- 字符串转换成整数(atoi)函数的具体实现
- 字符串string转整数int 实现自己的atoi函数
- 字符串与整数的转换函数 atoi 和sprintf
- 模拟atoi函数,从字符串到数字的转化
- //实现一个atoi的函数,atoi是将字符串转换成整数
- 处理字符串的函数
- atoi函数的实现
- atoi函数的学习
- 奇怪的atoi函数!
- atoi()函数的实现
- atoi()函数的实现
- atoi函数的实现
- atoi函数的实现
- atoi函数的实现
- BeautifulSoup
- Electron + Vue 实现一个代理客户端
- LeetCode-Easy部分中标签为String 459. Repeated Substring Pattern
- 由WifiStateMachine来理解StateMachine
- 计算机组成复习 数字电路模块 待续Ing
- 1.leetcode-字符串处理函数atoi的书写
- 《Web安全深度剖析》笔记(一)
- 1.javaScript 小案例
- Ubuntu下安装mysql注意要点
- hakcinglab解密关WP
- 【VS】无法启动***.dll
- 基于MySQL 5.7多源复制+Keepalived搭建高可用
- hackinglab上传关
- 欧拉函数及其申引证明