leetcode第八题--String to Integer (atoi)
Problem:
Implement atoi to convert a string to an integer.
Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input cases.
Notes: It is intended for this problem to be specified vaguely (ie, no given input specs). You are responsible to gather all the input requirements up front.
spoilers alert... click to show 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.
哈哈,这题也没有参考别人的代码,我是看完了以上题目,修改了七次终于通过了。
我根据requirements for atoi写,
先写了个子函数,用来返回正确的数字字符串
在这当中首先是读过前面的空格,如果第一个非空格字符不是 + - 或者数字,那么返回空字符串。如果是+号或者-号,那么后边必须紧跟数字,否则也返回空字符。如果以上都没有返回,那么就是遇到数字了,直接读到非数字部分,然后将正负号与数字一同返回字符串。
再在atoi中判断返回的字符串
我定义的是long long 型来存,通过string转换为数字long long 型(通过包含sstream头文件,利用stringstream转的),然后判断long long 型在正负情况下和INT_MAX 或 INT_MIN 的比值,特别要注意是符号的时候,如果边界不对那么很多case通过不了,我一开始用long型发现不行,才转用long long 型的。
还有就是一开始我不知道原来一定要规定开头才算。如果数字在中间,前后其他字符就不算了。例如“abc123”虽然有123,但是因为开头的不是符合要求所以就不能返回数字,直接返回0即可。
class Solution {
public:
int atoi(const char *str)
{
string s = substringInteger(str);
if (s.size() == )
return ;
int positive = ;
if (s[] == '+')
s = s.substr(,s.size() - );
else if(s[] == '-')
{
s = s.substr(,s.size() - );
positive = ;
}
std::stringstream ss;
ss<<s;
long long result;
ss>>result;
if (positive == )
{
long long maxval = ; // 这里直接用数字是因为我用 INT_MAX + 1 的时候显示的是 INT_MIN的值, -1的case会出错
if (result < maxval)
return -*result;
else
return INT_MIN;
}
else
{
if (result < INT_MAX)
return result;
else
return INT_MAX;
}
}
private:
//leetcode7 return the sub string include interger
string substringInteger(string s)
{
if (s.size() == )
return "";
string substring;
int pos = -, len = ;
int index = ;
int positive = ;
while(s[index] == ' ' && index < s.size())
{
index++;
}
if (index == s.size())
return "";
if(s[index]!='+' && s[index]!='-' && !isdigit(s[index]))
return "";
if(s[index] == '+'&&index+<s.size())
if(!isdigit(s[index+]))
return "";
if(s[index] == '-'&&index+<s.size())
{
if(!isdigit(s[index+]))
return "";
else
positive = ;
}
// detect till digit if exist
while(!isdigit(s[index])&&index<s.size())
{
index++;
}
if(index == s.size())
return "";
// find the length of the digit
pos = index;
while(isdigit(s[index])&&index<s.size())
{
index++;
}
len = index - pos;
substring = s.substr(pos,len);
// if negative return '-' in front
if (positive == )
substring = "-" + substring;
return substring;
}
};
这次coding中回顾并学习了 substr,sstream 中 stringstream 将string和任意型转换 INT_MAX 和 INT_MIN 特别边界处理时注意,因为有个尾数是8,还有就是代码中用中文注释的地方也要注意。
leetcode第八题--String to Integer (atoi)的更多相关文章
- leetcode第八题 String to Integer (atoi) (java)
String to Integer (atoi) time=272ms accepted 需考虑各种可能出现的情况 public class Solution { public int atoi( ...
- [leetcode]经典算法题- String to Integer (atoi)
题目描述: 把字符串转化为整数值 原文描述: Implement atoi to convert a string to an integer. Hint: Carefully consider al ...
- LeetCode【8】. String to Integer (atoi) --java实现
String to Integer (atoi) Implement atoi to convert a string to an integer. Hint: Carefully consider ...
- LeetCode(8)String to Integer (atoi)
题目: Implement atoi to convert a string to an integer. Hint: Carefully consider all possible input ca ...
- 【leetcode❤python】 8. String to Integer (atoi)
#-*- coding: UTF-8 -*-#需要考虑多种情况#以下几种是可以返回的数值#1.以0开头的字符串,如01201215#2.以正负号开头的字符串,如'+121215':'-1215489' ...
- Kotlin实现LeetCode算法题之String to Integer (atoi)
题目String to Integer (atoi)(难度Medium) 大意是找出给定字串开头部分的整型数值,忽略开头的空格,注意符号,对超出Integer的数做取边界值处理. 方案1 class ...
- Leetcode 8. String to Integer (atoi)(模拟题,水)
8. String to Integer (atoi) Medium Implement atoi which converts a string to an integer. The functio ...
- 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 ...
- 乘风破浪:LeetCode真题_008_String to Integer (atoi)
乘风破浪:LeetCode真题_008_String to Integer (atoi) 一.前言 将整型转换成字符串,或者将字符串转换成整型,是经常出现的,也是必要的,因此我们需要熟练的掌握,当然也 ...
随机推荐
- 单机部署redis主从备份
redis为了避免单点故障,也支持主从备份.个人在做主从备份的实验时,因为机器数量有限,一般非常少有多台机器做支撑. 本文就将叙述怎样在一台电脑上实现redis的主从备份. 同一台机器上部署多个red ...
- Swift的74标准功能
Swift中共同拥有74个内建函数,可是在Swift官方文档("The Swift Programming Language")中仅仅记录了7中.剩下的67个都没有记录. 本文将列 ...
- MySQL分页实现
mysql> select pname from product; +--------+ | pname | +--------+ | 产品1 | | 产品2 | | 产品三 | +--- ...
- 具体分析Struts工作流程
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXV3ZW56aGU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA ...
- lua转让C++书面DLL达到“热更新”
原创作品,请注明出处转载CSDN:http://blog.csdn.net/relar/article/details/38084689 开发游戏server往往有"热更新"的需求 ...
- OCP读书笔记(22) - 题库(ExamB)
101.Identify two situations in which you can use Data Recovery Advisor for recovery. (Choose two.) A ...
- ubuntu14.04通过将语音,耳机没有声音
真正使用linux每天都有新的发现啊,截至今天上午有一台电脑,听几首歌.后插上耳机中没有声音.我认为这是一个糟糕的耳机,把插在手机耳机,我发现了一个语音耳机,很奇怪,我喜欢计算机接口是不是有问题,是在 ...
- 20天android学习
20多天的实习(事实上,一个人学习的东西)要结束, 其余的都只有读研. 此20许多天,我学到了很多东西, 至android的发展也有一定的了解.之后写这篇文章主要是完成研究可以学得很快再次回升 1.安 ...
- 沃森Mysql数据库修复工具
华信Mysql数据库修复程序是由北京华信数据恢复中心独立研发.主要针对Mysql数据库损坏的恢复. 本程序可用于因为各种误操作而导致数据丢失的恢复,以及因为断电.陈列损坏.硬盘坏道等各种原因导致数据库 ...
- 计蒜客 作弊揭发者(string的应用)
鉴于我市拥堵的交通状况,市政交管部门经过听证决定在道路两侧安置自动停车收费系统.当车辆驶入车位,系统会通过配有的摄像头拍摄车辆画面,通过识别车牌上的数字.字母序列识别车牌,通过连接车管所车辆信息数据库 ...