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.

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)的更多相关文章

  1. leetcode第八题 String to Integer (atoi) (java)

    String to Integer (atoi) time=272ms   accepted 需考虑各种可能出现的情况 public class Solution { public int atoi( ...

  2. [leetcode]经典算法题- String to Integer (atoi)

    题目描述: 把字符串转化为整数值 原文描述: Implement atoi to convert a string to an integer. Hint: Carefully consider al ...

  3. LeetCode【8】. String to Integer (atoi) --java实现

    String to Integer (atoi) Implement atoi to convert a string to an integer. Hint: Carefully consider ...

  4. LeetCode(8)String to Integer (atoi)

    题目: Implement atoi to convert a string to an integer. Hint: Carefully consider all possible input ca ...

  5. 【leetcode❤python】 8. String to Integer (atoi)

    #-*- coding: UTF-8 -*-#需要考虑多种情况#以下几种是可以返回的数值#1.以0开头的字符串,如01201215#2.以正负号开头的字符串,如'+121215':'-1215489' ...

  6. Kotlin实现LeetCode算法题之String to Integer (atoi)

    题目String to Integer (atoi)(难度Medium) 大意是找出给定字串开头部分的整型数值,忽略开头的空格,注意符号,对超出Integer的数做取边界值处理. 方案1 class ...

  7. Leetcode 8. String to Integer (atoi)(模拟题,水)

    8. String to Integer (atoi) Medium Implement atoi which converts a string to an integer. The functio ...

  8. leetcode day6 -- String to Integer (atoi) &amp;&amp; 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 ...

  9. 乘风破浪:LeetCode真题_008_String to Integer (atoi)

    乘风破浪:LeetCode真题_008_String to Integer (atoi) 一.前言 将整型转换成字符串,或者将字符串转换成整型,是经常出现的,也是必要的,因此我们需要熟练的掌握,当然也 ...

随机推荐

  1. lsblk请参阅块设备

    lsblk可以查看分区和挂载的磁盘使用情况 lsblk全部的參数 -a, --all            显示全部设备  -b, --bytes          以bytes方式显示设备大小  - ...

  2. 求N!末尾的0的个数(找规律+递归)

    0\'s Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描写叙述 计算整数n!(n的阶乘)末尾有多少个0. 输入 第一行输入一个数T代 ...

  3. Flux demo

    Flux demo Introduction flux应用架构如下图所示,本文并不是讲述怎么立即做一个酷炫的应用,而是讲述如何依照这种框架,来进行代码的组织.我们先把这个流程转述为文字:抛开与webA ...

  4. seajs进行模块化开发

    seajs进行模块化开发 模块化前端开发入门指南(二) 2015-08-26 15:23 by paseo, 370 阅读, 0 评论, 收藏, 编辑 概览 使用seajs模块化加载器进行模块化开发, ...

  5. react.js 从零开始(一)

    React 是什么? 网络上的解释很多...我这里把他定义为 通过javascript 的形式组件化 html的框架... React 仅仅是 VIEW 层. React 提供了模板语法以及一些函数钩 ...

  6. 解决Gradle minifyEnabled无法找到错误

    Android studio最新版0.9支持proguard minify,shrinkResources ,尝试了下,提示找不到minifyEnabled方法 Error:(29, 0) Gradl ...

  7. 什么是WEBserver? 经常使用的WEBserver有哪些?

    什么是WEBserver? 经常使用的WEBserver有哪些? 一.什么是WEBserver Webserver能够解析HTTP协议.当Webserver接收到一个HTTP请求,会返回一个HTTP响 ...

  8. react.js 从零开始(二)组件的生命周期

    什么是生命周期? 组件本质上是一个状态机,输入确定,输出一定确定. 当状态改变的时候 会触发不同的钩子函数,可以让开发者做出响应.. 一个组件的生命周期可以概括为 初始化:状态下 可以自定义的函数 g ...

  9. 从头开始学JavaScript (十)——垃圾收集

    原文:从头开始学JavaScript (十)--垃圾收集 一.垃圾收集 1.1javascript垃圾收集机制: 自动垃圾收集,执行环境会负责管理代码执行过程中的使用的内存.而在C和C++之类的语言中 ...

  10. UVA11983 - Weird Advertisement(扫描线)

    UVA11983 - Weird Advertisement(扫描线) 题目链接 题目大意:给你n个覆盖矩形,问哪些整数点是被覆盖了k次. 题目大意:这题和hdu1542是一个题型.可是这题求的是覆盖 ...