atoi (表示 ascii to integer)是把字符串转换成整型数的一个函数,应用在计算机程序和办公软件中。int atoi(const char *nptr) 函数会扫描参数 nptr字符串,会跳过前面的空白字符(例如空格,tab缩进)等。如果 nptr不能转换成 int 或者 nptr为空字符串,那么将返回0。特别注意,该函数要求被转换的字符串是按十进制数理解的。atoi输入的字符串对应数字存在大小限制(与int类型大小有关),若其过大可能报错-1。

实现思路:只需一次遍历,将其转化为十进制整型数据。首先定位字符串第一个非空格字符,检查其是否为“-”“+”号,若是,则确定其正负值。然后指针后跳,将字符转为整型(记得减去‘0’才是数字的真实值),乘10在加即可。

#include<iostream>
#include<stdlib.h>
#include<string.h>
using namespace std; class Myatoi
{
public:
int func(const char* str);
}; int Myatoi::func(const char* str)
{
if(strlen(str) == 0)
return 0;
int a = 0, flag = 1; while(str[0] == ' ')
++str; if(str[0] == '-')
{
flag = -1;
++str;
}
else if(str[0] == '+')
{
flag = 1;
++str;
}
while(str[0]>='0' && str[0]<='9')
{
a *= 10;
a += (int)(str[0] - '0');
if(a > 0x80000000)
{
cout<<"Overflow!  ";
return -1;
}
++str;
}
return flag*a; } int main()
{
char p[3][20] = {"-12345.678","+132342wr","999999999999999999"}; Myatoi ai;
for(int i=0; i<3; ++i)
{
cout<<"p["<<i<<"] = "<<p[i]<<" myatoi(p["<<i<<"]) = "<<ai.func(p[i]);
cout<<"  "<<atoi(p[i])<<endl;
}
return 0;
}

结果如下

看起来在数字过大溢出时,标准atoi并没有正确报错-1。

myatoi的更多相关文章

  1. [LeetCode] String to Integer (atoi) 字符串转为整数

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

  2. Leetcode分类刷题答案&心得

    Array 448.找出数组中所有消失的数 要求:整型数组取值为 1 ≤ a[i] ≤ n,n是数组大小,一些元素重复出现,找出[1,n]中没出现的数,实现时时间复杂度为O(n),并不占额外空间 思路 ...

  3. 全部leetcode题目解答(不含带锁)

    (记忆线:当时一刷完是1-205. 二刷88道.下次更新记得标记不能bug-free的原因.)   88-------------Perfect Squares(完美平方数.给一个整数,求出用平方数来 ...

  4. python leetcode 1

    开始刷 leetcode, 简单笔记下自己的答案, 目标十一结束之前搞定所有题目. 提高一个要求, 所有的答案执行效率必须要超过 90% 的 python 答题者. 1. Two Sum. class ...

  5. LeetCode Note 1st,practice makes perfect

    1. Two Sum Given an array of integers, return indices of the two numbers such that they add up to a ...

  6. No.008:String to Integer (atoi)

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

  7. C库函数使用与总结之字符串处理函数

    1. memcpy(拷贝内存内容) [头文件]#include <string.h> [函数原型]void *memcpy(void *dest, const void *src, siz ...

  8. LeetCode 7 -- String to Integer (atoi)

    Implement atoi to convert a string to an integer. 转换很简单,唯一的难点在于需要开率各种输入情况,例如空字符串,含有空格,字母等等. 另外需在写的时候 ...

  9. [LeetCode] 8. String to Integer (atoi)

    Implement atoi to convert a string to an integer. public class Solution { public int myAtoi(String s ...

随机推荐

  1. 前端面试手写代码——JS函数柯里化

    目录 1 什么是函数柯里化 2 柯里化的作用和特点 2.1 参数复用 2.2 提前返回 2.3 延迟执行 3 封装通用柯里化工具函数 4 总结和补充 1 什么是函数柯里化 在计算机科学中,柯里化(Cu ...

  2. ADB WIFI无线调试真正摆脱usb数据线连接,一次也不用!

    常见的使用ADB无线调试步骤 手机"开发者模式"菜单中开启"USB调试" 和"无线调试",手机网络与电脑在同一网内; 手机使用USB与电脑进 ...

  3. 西邮Linux兴趣小组第一次技术分享会

    2016年10月30日晚,西邮Linux兴趣小组技术分享会在西安邮电大学长安校区东区逸夫教学楼FF305室成功举办.200多名来自全校不同专业的15,16级同学参加了此次分享会. 分享会于20:00正 ...

  4. vue+element初始化创建项目

    初始化 步骤1:选择开发框架并创建 步骤1:vue create shop   回车步骤2:安装方式选择第二个自定义步骤3:安装模块: (*) Babel ( ) TypeScript ( ) Pro ...

  5. 【GIS】GeoServer服务Authkey配置记录

    特别感谢:https://www.cnblogs.com/HandyLi/p/8624507.html 1.服务受控配置 2.授权方式 3.Url模式配置 4.Authkey密钥配置 5.使用 在wm ...

  6. 开源支持东财自动交易的简单量化交易框架pytrader

    pytrader是基于 easytrader 和 easyquotation 的量化交易框架,支持东方财富自动交易,支持进行策略回测. 开源地址:https://github.com/jadepeng ...

  7. python unicode escape

    from: https://stackoverflow.com/questions/44742806/how-to-remove-escape-characters-escaping-unicode- ...

  8. 微信小程序(九)

    小程序运行环境与基本架构 每个小程序都是运行在它所在的微信客户端上的,通过微信客户端给它提供的运行环境,小程序可以直接获取微信客户端的原生体验和原生能力. wxml视图文件和wxss样式文件都是对渲染 ...

  9. shuffle.java

    /************************************************************************* * Compilation: javac Shuf ...

  10. 探究 Go 源码中 panic & recover 有哪些坑?

    转载请声明出处哦~,本篇文章发布于luozhiyun的博客: https://www.luozhiyun.com/archives/627 本文使用的go的源码1.17.3 前言 写这一篇文章的原因是 ...