Leetcode 8. String to Integer (atoi) atoi函数实现 (字符串)
2024-09-04 11:15:23
Leetcode 8. String to Integer (atoi) atoi函数实现 (字符串)
题目描述
实现atoi
函数,将一个字符串转化为数字
测试样例
Input: "42"
Output: 42
Input: " -42"
Output: -42
Input: "4193 with words"
Output: 4193
Input: "words and 987"
Output: 0
详细分析
这道题的corner cases非常多,请务必确保下面cases都能通过的情况下再提交。
"42"
"words and 987"
"-91283472332"
"0-1"
"-000000000000001"
" 0000000000012345678"
"10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000522545459"
"-2147483647"
"-2147483648"
"2147483648"
"2147483649"
""
"7"
" +0 123"
算法实现
class Solution {
public:
string trim(const std::string&str){
string nstr;
int i=0;
while(isspace(str[i])){
i++;
}
for(;i<str.length();i++){
if(isspace(str[i])){
break;
}
nstr +=str[i];
}
return nstr;
}
int myAtoi(string str) {
str = trim(str);
if(str.length()==0 || (str[0]!='+'&&str[0]!='-'&& !isdigit(str[0]))){
return 0;
}
int i=0;
//consume sign char
if(str[0] =='+' || str[0]=='-'){
i++;
}
string nstr;
while(isdigit(str[i])){
nstr+=str[i];
i++;
}
if(nstr.length()==0){
return 0;
}
i=0;
// consume meaningless zeros
while(nstr[i]=='0'){
i++;
}
nstr = nstr.substr(i);
long long result = 0L;
unsigned long long exp = 1;
for(int k=nstr.length()-1;k>=0;k--){
result += ((int)(nstr[k]-'0'))*exp;
if(exp> numeric_limits<int>::max()){
return str[0]=='-'?numeric_limits<int>::min():numeric_limits<int>::max();
}
exp*=10;
if(result> numeric_limits<int>::max()){
return str[0]=='-'?numeric_limits<int>::min():numeric_limits<int>::max();
}
}
return str[0]=='-'?-result:result;
}
};
最新文章
- 学习ASP.NET缓存机制
- 练习一:GitHub Desktop下载及使用
- hdu5882 Balanced Game
- linux下vi命令的使用
- CSS Sprites优点
- 【无聊放个模板系列】BZOJ 3172 (AC自动机)
- FZU 1889 龟兔赛跑
- 【YFMemoryLeakDetector】人人都能理解的 iOS 内存泄露检测工具类
- shell 中的特殊变量
- window alias给cmd命令起别名
- 关于使用JPA中@Query注解传递表名/视图名参数的问题
- 【UVA534】Frogger 最小瓶颈路
- Oracle体系结构之Oracle静态监听配置模板
- matlab sparse()
- UI设计必用工具 — AI快捷键大全
- python 中的__del__
- MySQL权限操作:Grant、Revoke
- yii2.0发送qq邮件详情配置
- DevOps,不是一个传说!
- Android 自定义Camera 随笔