算法练习-字符串转换成整数(实现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 或者其他类似的库函数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们 ...
随机推荐
- CF580D Kefa and Dishes 状压dp
When Kefa came to the restaurant and sat at a table, the waiter immediately brought him the menu. Th ...
- 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 ...
- pytorch 0.4.1安装问题
环境 ubuntu 16.04, anaconda3, python 2.7 将pytorch升级为0.4.1后,import torch报错 undefined symbol: _ZN4thpp10 ...
- 【2014年百度之星资格赛1001】Energy Conversion
Problem Description 魔法师百小度也有遇到难题的时候—— 现在,百小度正在一个古老的石门面前,石门上有一段古老的魔法文字,读懂这种魔法文字需要耗费大量的能量和大量的脑力. 过了许久, ...
- Unity 动画系统 AnimationEvent 动画事件
- 2-29 while
do while for
- 【笔记】如何在for语句中迭代多个可迭代对象
并行=>使用内置函数zip,它能将多个可迭代对象合并,每次迭代返回一个元组. for i,j,k in zip(a,b,c): TODO 穿行=>使用标准库中的itertools.chai ...
- 自定义classLoader思考
jvm对于类实例的区分 基于完全限定名+classLoader 不同的classLoader可以加载同一class,生成不同实例, 但是这两个class实例生成的对象不能强转 spring boot ...
- ettercap局域网DNS欺骗实现过程
转载:https://www.cnblogs.com/hkleak/p/5043063.html 笔记一:ettercap是什么? 我们在对WEB安全检测的时候都会用到Cain和netfuke这两款工 ...
- ORA-1000的问题 Cursor 过多 (文档 ID 18591.1)
#查看用户cursor的使用情况 col sid for a9999999999 col osuser for a20 col machine for a20 col num_curs for a ...