练习问题来源

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. kuangbin专题十六 KMP&&扩展KMP HDU1686 Oulipo

    The French author Georges Perec (1936–1982) once wrote a book, La disparition, without the letter 'e ...

  2. Vue-Router路由Vue-CLI脚手架和模块化开发 之 路由的动态跳转

    在上一篇的博文中,实现的跳转是在页面中进行实现的 利用vue-router实例方法,使用js对路由进行动态跳转: 1.router.push:参数为路由对象,跳转到指定路由,跳转后会产生历史记录: & ...

  3. 【Leetcode】Largest Rectangle in Histogram

    Given n non-negative integers representing the histogram's bar height where the width of each bar is ...

  4. hdu3483 A Very Simple Problem 非线性递推方程2 矩阵快速幂

    题目传送门 题目描述:给出n,x,mod.求s[n]. s[n]=s[n-1]+(x^n)*(n^x)%mod; 思路:这道题是hdu5950的进阶版.大家可以看这篇博客hdu5950题解. 由于n很 ...

  5. jenkins插件之火线扫描(静态代码扫描)

    参考网址: https://blog.csdn.net/oggboy/article/details/78646622

  6. java——多线程的实现方式、三种办法解决线程赛跑、多线程数据同步(synchronized)、死锁

    多线程的实现方式:demo1.demo2 demo1:继承Thread类,重写run()方法 package thread_test; public class ThreadDemo1 extends ...

  7. css连续的纯数字或字母强制换行

    white-space:normal; word-break:break-all; white-space: normal|pre|nowrap|pre-wrap|pre-line|inherit;w ...

  8. JavaSE---对象序列化

    1.对象序列化机制 允许把内存中的Java对象转换成平台无关的二进制流,从而可以将二进制流持久保存到磁盘 或 在网络中直接传输: (目的:使得对象可以脱离程序的运行而独立存在) package com ...

  9. CTeX里面CTRL-Space和中文输入法的冲突问题解决

    我使用的是windows xp,相信下面的方法也能应用到win7等windows系统上. 我希望在CTex套件的WinEdt 6.0里使用模板自动插入内容时,想快速从上到下遍历” * “并修改. 通过 ...

  10. LeetCode 881.救生艇(C++)

    第 i 个人的体重为 people[i],每艘船可以承载的最大重量为 limit. 每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit. 返回载到每一个人所需的最小船数.(保证每个人都 ...