算法练习-字符串转换成整数(实现atoi函数)
练习问题来源
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函数)的更多相关文章
- 面试题49:把字符串转换成整数(atoi)
需要考虑的问题都已在程序中注释 bool isValid; int StrToInt(const char* str) { isValid = false; //不合法情形1:空指针 if (str ...
- [Leetcode] String to integer atoi 字符串转换成整数
Implement atoi to convert a string to an integer. Hint: Carefully consider all possible input cases. ...
- 如何实现字符串转换成整数(实现atoi内置函数)?
题目描述 输入一个由数字组成的字符串,把它转换成整数并输出.例如:输入字符串"123",输出整数123. 给定函数原型int StrToInt(const char *str) , ...
- 17.把字符串转换成整数[atoi]
[题目] 把字符串转换成整数,需要考虑字符串有效性. [代码] C++ Code 123456789101112131415161718192021222324252627282930313233 ...
- 【Java】 剑指offer(67) 把字符串转换成整数
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 请你写一个函数StrToInt,实现把字符串转换成整数这个功能 ...
- 《剑指offer》第六十七题(把字符串转换成整数)
// 面试题67:把字符串转换成整数 // 题目:请你写一个函数StrToInt,实现把字符串转换成整数这个功能.当然,不 // 能使用atoi或者其他类似的库函数. #include <ios ...
- 剑指offer——把字符串转换成整数(c++)
题目描述请你写一个函数StrToInt,实现把字符串转换成整数这个功能.当然,不能使用atoi或者其他类似的库函数. 示例 1:输入: " -42"输出: -42解释: 第一个非空 ...
- 【剑指Offer学习】【面试题49:把字符串转换成整数】
题目:实现一个函数stringToInt,实现把字符串转换成整数这个功能.不能使用atoi或者其它相似的库函数. 题目解析 这看起来是非常easy的题目,实现基本功能 ,大部分人都能用10行之内的代码 ...
- [LeetCode]面试题67. 把字符串转换成整数
题目 写一个函数 StrToInt,实现把字符串转换成整数这个功能.不能使用 atoi 或者其他类似的库函数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们 ...
随机推荐
- windows_study_3
描述:如何解决hyper-v全屏不能自适应屏幕大小? 解决:调节虚拟机的分辨率.
- Web项目和Windows应用程序的配置文件
1.Web项目,配置文件应创建在Web项目下,即使是要把配置文件作为一个单独的文件进行配置(比如log4net.config),也需要把该配置文件放在Web项目下:同理Windows应用程序的化,配置 ...
- Luogu P2107 小Z的AK计划 堆贪心
好久不做这种题了... 存一下每个点的位置和时间,由于达到某个位置跟之前去哪里AK的无关,所以在时间超限后,可以用大根堆弹掉之前消耗时间最大的,来更新答案,相当于去掉之前花费最大的,直到时间不在超限. ...
- lintcode - 房屋染色
class Solution { public: /* * @param costs: n x 3 cost matrix * @return: An integer, the minimum cos ...
- django 请求体和请求体相关知识
请求头ContentType ContentType指的是请求体的编码类型,常见的类型共有3种: django 如果发送post请求,或者表单提交数据.如果不设置enctype属性. 就会以appli ...
- Spring注入的反射解释
对于如下配置片段: <bean id="id" class="lee.Aclass"> <!--property配置需要依赖注入的属性-- ...
- Win10磁盘占用率过高
打开服务 禁用Superfetch 禁用Windows Search 禁用Connected User Experiences and Telemetry 禁用Windows Update[恢复选项卡 ...
- 关于JAVA的基本知识
TCP/IP 协议族常用协议 应用层:TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等 传输层:TCP,UDP 网络层:IP,ICMP,OSPF,EIGRP,IGMP 数据链 ...
- 2019.03.20 读书笔记 as is 以及重写隐式/显示
强转.as is 的用法 强制转换类型有两种:子类转基类,重写隐式(implicit )\显示(explicit) 转换操作符 class myclass { private int value; p ...
- 利用划分树求解整数区间内第K大的值
如何快速求出(在log2n的时间复杂度内)整数区间[x,y]中第k大的值(x<=k<=y)? 其实我刚开始想的是用快排来查找,但是其实这样是不行的,因为会破坏原序列,就算另外一个数组来存储 ...