leetcode: String to Integer (atoi)
来源:互联网 发布:淘宝自定义区图片尺寸 编辑:程序博客网 时间:2024/06/13 12:40
原题:String to Integer (atoi)
这道题放在leetcode上,多了一些需求,要求处理非法字符,其实是经典的字符串提取操作。
问题要求
一个字符串是合法的,则它的前缀必须是由若干个空格组成的(可以没有),可以有1个正负号(多个也被认为是非法的),正负号紧接着的是0-9的数字,后缀的任何非法字符都不用管。
要求:将合法的字符串转换成int数值,若转换后超过INT的范围,则对应返回其上界或下界;非法字符串统一返回0。
思路
我把解决问题的逻辑分为两部分:
1. 提取合法字符串的数字部分,并确认其正负性,非法字符串则在这个过程中被变成空串;
2. 将提取后的字符串转换成int数值。
提取字符串的过程
直接看代码和注释:
bool isNum(char ch) { return (ch >= '0' && ch <= '9');}bool isSign(char ch) { return (ch == '+') || (ch == '-');}bool strip(string& str) { int len = str.size(), left = 0, right; // 前缀只允许空格,其它非法字符则表示该字符串非法,应返回0 while (left < len && !isNum(str[left]) && !isSign(str[left])) { if (str[left] != ' ') { str = ""; return false; } ++left; } // 处理正负号 bool isNeg = false; if (isSign(str[left])) { isNeg = str[left] == '-'; ++left; } // 后缀的非法字符全部不用管,只看数字就好了 right = left; while (right < len && isNum(str[right])) ++right; str = str.substr(left, right - left); return isNeg;}
str2int
这里给的参数是处理过后的字符串了,不用担心非法字符,可以专心做转换,有偷懒的方法(用C++的sstream),也有务实的方法。
先声明一下:
static const int INT_MAX_VALUE = 0x7fffffff, INT_MIN_VALUE = 0x80000000;
// 偷懒的方法int str2int(const string& str, bool isNeg) { double num; stringstream ss(str); ss >> num; if (isNeg) num = -num; if (num > INT_MAX_VALUE) return INT_MAX_VALUE; if (num < INT_MIN_VALUE) return INT_MIN_VALUE; return num;}
务实的方法为:
// 务实的方法int str2int(const string& str, bool isNeg) { long long num = 0; for (int i = 0; i < str.size(); ++i) { num *= 10; num += (int)(str[i] - '0'); if (!isNeg && num > INT_MAX_VALUE) { return INT_MAX_VALUE; } else if (isNeg && -num < INT_MIN_VALUE) { return INT_MIN_VALUE; } } return isNeg ? -num : num;}
这里利用了long long的便利,其实可以用int来存放num的,只是要多加一些判断而已!
1 0
- LeetCode:String to Integer (atoi)
- LeetCode: String to Integer (atoi)
- LeetCode String to Integer(atoi)
- LeetCode :String to Integer (atoi)
- Leetcode: String to Integer (atoi)
- Leetcode : String to Integer (atoi)
- 【leetcode】String to Integer (atoi)
- [LeetCode]String to Integer (atoi)
- LeetCode-String to Integer (atoi)
- [leetcode] String to Integer (atoi)
- LeetCode - String to Integer (atoi)
- 【leetcode】String to Integer (atoi)
- LeetCode - String to Integer (atoi)
- LeetCode: String to Integer (atoi)
- Leetcode: String to Integer (atoi)
- [LeetCode] String to Integer (atoi)
- leetcode String to Integer (atoi)
- [LeetCode]String to Integer (atoi)
- 选择Hexo还是Jekyll
- 拉普拉斯算子
- 周报8.15-8.21 struts2实现文件上传和下载(下载)
- 使用Spring进行统一日志管理 + 统一异常管理
- 《从零开始学Swift》学习笔记(Day 19)——函数参数传递
- leetcode: String to Integer (atoi)
- Java基础--待续未完
- log日志的打印
- 递归显示无限级 导航菜单
- redis网页版
- java常用utils类
- NumberUtils的学习
- Guava 中的 ListenableFuture
- NSMutableString的常见用法