练习问题来源

https://leetcode.com/problems/string-to-integer-atoi/

https://wizardforcel.gitbooks.io/the-art-of-programming-by-july/content/01.03.html

要求:

输入一个由数字组成的字符串,把它转换成整数并输出。例如:输入字符串"123",输出整数123。

给定函数原型int StrToInt(const char *str) ,实现字符串转换成整数的功能,不能使用库函数atoi。

解法:

 // ================字符串转换成整数==================
// 题目描述:
// 输入一个由数字组成的字符串,把它转换成整数并输出。例如:输入字符串"123",输出整数123
//给定函数原型int StrToInt(const char *str) ,实现字符串转换成整数的功能,不能使用库函数atoi // 需要考虑以下几点:
// 空指针输入:输入的是指针,在访问空指针时程序会崩溃,因此在使用指针之前需要先判断指针是否为空。
// 正负符号:整数不仅包含数字,还有可能是以'+'或'-'开头表示正负整数,因此如果第一个字符是'-'号,则要把得到的整数转换成负整数。
// 非法字符:输入的字符串中可能含有不是数字的字符。因此,每当碰到这些非法的字符,程序应停止转换。
// 整型溢出:输入的数字是以字符串的形式输入,因此输入一个很长的字符串将可能导致溢出
int StrToInt(const char *str)
{
static const int MAX_INT = (int)((unsigned)~ >> );
static const int MIN_INT = -(int)((unsigned)~ >> ) - ;
unsigned int n = ; // 判断输入是否为空
if( == str)
{
return ;
} // 处理空格
while (' ' == *str)
++str; // 处理正负
int sign = ;
if('+' == *str || '-' == *str)
{
if(*str == '-')
sign = -;
++str;
} // 检测之后的所有字符是否为 0~9
const char *strDetect = str;
if (*strDetect <= '' || *strDetect > '')
{
return ;
}
else
{
++strDetect;
while((*strDetect >= '' && *strDetect <= '') && ('\0' != *strDetect))
{
++strDetect;
}
if('\0' != *strDetect)
return ;
} while (*str >= '' && *str <= '')
{
// 处理溢出
int c = *str - '';
if(sign > && (n > MAX_INT / || (n == MAX_INT / && MAX_INT %)))
{
n = MAX_INT;
break;
}
else if (sign < && (n > (unsigned)MIN_INT / ||
(n == (unsigned)MIN_INT / && (unsigned)MIN_INT % )))
{
n = MIN_INT;
break;
} // 把之前得到的数字乘以10,再加上当前字符表示的数字
n = n * + c;
++str;
} return sign > ? n : -n;
}

算法练习-字符串转换成整数(实现atoi函数)的更多相关文章

  1. 面试题49:把字符串转换成整数(atoi)

    需要考虑的问题都已在程序中注释 bool isValid; int StrToInt(const char* str) { isValid = false; //不合法情形1:空指针 if (str ...

  2. [Leetcode] String to integer atoi 字符串转换成整数

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

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

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

  4. 17.把字符串转换成整数[atoi]

    [题目] 把字符串转换成整数,需要考虑字符串有效性. [代码]  C++ Code  123456789101112131415161718192021222324252627282930313233 ...

  5. 【Java】 剑指offer(67) 把字符串转换成整数

      本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 请你写一个函数StrToInt,实现把字符串转换成整数这个功能 ...

  6. 《剑指offer》第六十七题(把字符串转换成整数)

    // 面试题67:把字符串转换成整数 // 题目:请你写一个函数StrToInt,实现把字符串转换成整数这个功能.当然,不 // 能使用atoi或者其他类似的库函数. #include <ios ...

  7. 剑指offer——把字符串转换成整数(c++)

    题目描述请你写一个函数StrToInt,实现把字符串转换成整数这个功能.当然,不能使用atoi或者其他类似的库函数. 示例 1:输入: " -42"输出: -42解释: 第一个非空 ...

  8. 【剑指Offer学习】【面试题49:把字符串转换成整数】

    题目:实现一个函数stringToInt,实现把字符串转换成整数这个功能.不能使用atoi或者其它相似的库函数. 题目解析 这看起来是非常easy的题目,实现基本功能 ,大部分人都能用10行之内的代码 ...

  9. [LeetCode]面试题67. 把字符串转换成整数

    题目 写一个函数 StrToInt,实现把字符串转换成整数这个功能.不能使用 atoi 或者其他类似的库函数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们 ...

随机推荐

  1. CF580D Kefa and Dishes 状压dp

    When Kefa came to the restaurant and sat at a table, the waiter immediately brought him the menu. Th ...

  2. kuangbin专题七 HDU1698 Just a Hook (区间设值 线段树)

    In the game of DotA, Pudge’s meat hook is actually the most horrible thing for most of the heroes. T ...

  3. pytorch 0.4.1安装问题

    环境 ubuntu 16.04, anaconda3, python 2.7 将pytorch升级为0.4.1后,import torch报错 undefined symbol: _ZN4thpp10 ...

  4. 【2014年百度之星资格赛1001】Energy Conversion

    Problem Description 魔法师百小度也有遇到难题的时候—— 现在,百小度正在一个古老的石门面前,石门上有一段古老的魔法文字,读懂这种魔法文字需要耗费大量的能量和大量的脑力. 过了许久, ...

  5. Unity 动画系统 AnimationEvent 动画事件

  6. 2-29 while

    do while for

  7. 【笔记】如何在for语句中迭代多个可迭代对象

    并行=>使用内置函数zip,它能将多个可迭代对象合并,每次迭代返回一个元组. for i,j,k in zip(a,b,c): TODO 穿行=>使用标准库中的itertools.chai ...

  8. 自定义classLoader思考

    jvm对于类实例的区分 基于完全限定名+classLoader 不同的classLoader可以加载同一class,生成不同实例, 但是这两个class实例生成的对象不能强转 spring boot ...

  9. ettercap局域网DNS欺骗实现过程

    转载:https://www.cnblogs.com/hkleak/p/5043063.html 笔记一:ettercap是什么? 我们在对WEB安全检测的时候都会用到Cain和netfuke这两款工 ...

  10. ORA-1000的问题 Cursor 过多 (文档 ID 18591.1)

      #查看用户cursor的使用情况 col sid for a9999999999 col osuser for a20 col machine for a20 col num_curs for a ...