算法分析

1. 若字符串开头是空格,则跳过所有空格,到第一个非空格字符,如果没有,则返回0.

2. 若第一个非空格字符是符号+/-,则标记isPositive的真假,这道题还有个局限性,那就是在c++里面,+-1和-+1都是认可的,都是-1,而在此题里,则会返回0.

3. 若下一个字符不是数字,则返回0. 完全不考虑小数点和自然数的情况,不过这样也好,起码省事了不少。

4. 如果下一个字符是数字,则转为整形存下来,若接下来再有非数字出现,则返回目前的结果。

5. 还需要考虑边界问题,如果超过了整形数的范围,则用边界值替代当前值

测试用例

空字符串:null;
有符号的字符串:+123,-123,+0,-0;
有前导space的字符串:spacespace123,spacespace-123;
边界值: INT_MAX (2147483647) or INT_MIN (-2147483648)
混有其它字符的字符串:-123a45(这时的返回值要为-123)

代码实现

int myAtoi(string str)
{
int res = 0;
int i = 0;
bool isPositive = true;
//空字符串返回
if(str.size() == 0)
{
return 0;
} //去除前面的空格字符
for(i = 0; i < str.size(); i++)
{
if(str[i] != ' ')
{
break;
}//if
}//for //判断符号
if(str[i] == '+')
{
isPositive = true;
++i;
}
else if(str[i] == '-')
{
isPositive = false;
++i;
}
else{} //提取数值
for(;i < str.size(); i++)
{
if(str[i] > '9' || str[i] < '0')
{
break;
}
if(res > INT_MAX / 10 || (res == INT_MAX / 10 && (str[i] - '0') >= 8))
{
res = isPositive ? INT_MAX : INT_MIN;
return res;
}
res = res * 10 + (str[i] - '0'); }//for return isPositive ? res : (-res);
}

  注意:判断一个数是否会越界,不能等它越界了再去判断,要在它越界之前判断它和INT_MAX/10的大小关系。

[重写库函数]atoi的更多相关文章

  1. 标准库函数atoi的实现

    标准库函数atoi用于将字符串类型的数据转换为整形数据:在转换过程中要考虑空指针.空字符串"".正负号,溢出等情况 这里是将字符串str转换为32位整型,其正数的最值为0x7FFF ...

  2. 转载 C++常用库函数atoi,itoa,strcpy,strcmp的实现

    C++常用库函数atoi,itoa,strcpy,strcmp的实现 C语言字符串操作函数 1. 字符串反转 - strRev2. 字符串复制 - strcpy3. 字符串转化为整数 - atoi4. ...

  3. 【C语言】编写函数实现库函数atoi,把字符串转换成整形

    //编写函数实现库函数atoi.把字符串转换成整形 #include <stdio.h> #include <string.h> int my_atoi(const char ...

  4. 库函数atoi()的实现

    int atoi(const char *nptr); 假设第一个非空格字符存在,是数字或者正负号则開始做类型转换,之后检測到非数字(包含结束符 \0) 字符时停止转换.返回整形数. 否则,返回零. ...

  5. 库函数atoi

    函数名:atoi 功能: 把一个字符串转换成一个整数. 看似简单,主要是情况太多,需要注意考虑. 测试代码: Test(NULL); Test(""); Test("12 ...

  6. [Swift]库函数atoi:将字符串内容转换为整数

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  7. 算法练习-字符串转换成整数(实现atoi函数)

    练习问题来源 https://leetcode.com/problems/string-to-integer-atoi/ https://wizardforcel.gitbooks.io/the-ar ...

  8. 如何实现字符串转换成整数(实现atoi内置函数)?

    题目描述 输入一个由数字组成的字符串,把它转换成整数并输出.例如:输入字符串"123",输出整数123. 给定函数原型int StrToInt(const char *str) , ...

  9. 转:C语言字符串操作函数 - strcpy、strcmp、strcat、反转、回文

    转自:C语言字符串操作函数 - strcpy.strcmp.strcat.反转.回文 C++常用库函数atoi,itoa,strcpy,strcmp的实现 作者:jcsu C语言字符串操作函数 1. ...

随机推荐

  1. last reboot

    last reboot是一个linux命令,查看上次重启时间等相关信息

  2. class如何命名更规范

    相信写css的人都会遇到下面的问题: 糟糕,怎么命名这个class,好像不太贴切,要是冲突了怎么办,要不要设计成通用一点... 而改别人css代码的时候则会一直有个疑问:这个class到底是只在这个地 ...

  3. js在线题目

    在线题目: https://www.nowcoder.com/ta/js-assessment

  4. c#变量在for循环内声明与外的区别

    1.这样写是错误的 #region 有这样的一个字符串类型的数组{"老杨","老苏","老马","老牛"};要求 变换成 ...

  5. SVN(一次检出&二次检出)

    一次检出: >进入经历文件夹 >输入svn checkout指令 >输入电脑密码 >输入用户名 >输入密码 >检出成功 第二次检出: >进入小涛文件夹 > ...

  6. js获取时间和日期,字符串和时间戳之间的转换

    //获取当前时间: var myDate = new Date();//当前时间 var year = myDate.getFullYear();//当前年份 var month = myDate.g ...

  7. 点击显示子菜单,离开隐藏子菜单(onmouseout下包含a标签的js解决方法)

    <div class="menu">     <a href="javascript:void(0);" id="a_all&quo ...

  8. 不调用库函数实现 strCpy

    实现函数时,首先要弄清楚特殊情况,边界条件要搞清. char* strCpy(char* src,char* des){ //判断指针是否为空 if(NULL==src||NULL == des) r ...

  9. eclipse android sdk javadoc

    sdk 的函数不提示帮助信息 查了下是现在adt版本没有doc文件夹,拷贝了早期的版本docs过来 其他具体操作如下:http://blog.csdn.net/lyh7736362/article/d ...

  10. WPF按钮清空自带样式,以及透明按钮时,Grid的Background属性设置引起"点击"问题.

    1.空样式按钮 <Style x:Key="EmptyButtonStyle" TargetType="Button">            &l ...