算法练习-字符串转换成整数(实现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 或者其他类似的库函数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们 ...
随机推荐
- MySQL中join的用法
近期用phpcms v9做项目,初期没有问题,后期随着数据量的增大,phpcms v9后台出现的栏目更新不动的情况,初期我以为是程序的问题,进行了程序排查,没有发现任何问题,登录上centos服务器后 ...
- php暂停函数sleep()和usleep的区别
在PHP中暂停代码执行一定时间,有两个函数可以实现,一个是sleep(),另一个是usleep(),它们参数都是一个整数值.sleep()是暂停多少秒,usleep()是暂停多少微秒. 注意:usle ...
- 07. 如何实现移动端rem适配
如何实现移动端rem适配 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...
- sublime中正则替换
匹配 <header></header> , “.” 是匹配任意 非 换行 符号 而 \s\S 匹配任何符号 匹配div class为navbar 的 div <d ...
- python3 enumerate()函数笔记
d={"A":"a","B":"b","C":"c","D" ...
- (转)如何使用caffe的MATLAB接口
编译MatCaffe 转自: http://blog.csdn.net/ws_20100/article/details/50525879 使用如下命令编译MatCaffe make all matc ...
- thinkPHP 模板操作
1.assign赋值 $this->assign('title','模板操作'); $this->assign('bests',$bests);//$bests是二维数组 2.变量的输出 ...
- socket阻塞与非阻塞情况下的recv、send、read、write返回值 以及epool_wait返回值学习
https://www.cnblogs.com/longingforlife/p/3289976.html
- GBDT,FM,FFM推导
GBDT推导: https://xgboost.readthedocs.io/en/latest/tutorials/model.html FM,FFM推导: https://tech.meituan ...
- entity framework discriminator error
前几天使用code first碰到错误:列名 'Discriminator' 无效.这是一个很少见的错误,搜索了很久才发现是code first的poco实体对象的继承问题. 比如,我定义了一个实体类 ...