面试题49:把字符串转换成整数(atoi)
需要考虑的问题都已在程序中注释
bool isValid; int StrToInt(const char* str)
{
isValid = false;
//不合法情形1:空指针
if (str == NULL)
return ; //不合法情形2:内容为“”
if (*str == '\0')
return ; const char *pData = str;
bool isNegative = false;
if (*pData == '+')
{
isNegative = false; //是否是负数
pData++;
//不合法情形3:内容为+
if (*pData == '\0')
return ;
}
else if (*pData == '-')
{
isNegative = true;
pData++;
//不合法情形3:内容为-
if (*pData == '\0')
return ;
} long long num = ; //设为long long检查越界
while (*pData != '\0')
{
//不合法情形5:存在非数字
if (*pData < '' || *pData > '')
return ;
else
{
num = num * + (*pData - '');
}
pData++;
} //不合法情形6:越界
num = isNegative ? - num : num;
//注意一定要加(signed int)
if (isNegative && num < (signed int)0x80000000 || !isNegative && num > 0x7FFFFFFF)
return ; isValid = true;
return num;
}
带测试的完整代码:
#include<iostream>
using namespace std; bool isValid; int StrToInt(const char* str)
{
isValid = false;
//不合法情形1:空指针
if (str == NULL)
return ; //不合法情形2:内容为“”
if (*str == '\0')
return ; const char *pData = str;
bool isNegative = false;
if (*pData == '+')
{
isNegative = false; //是否是负数
pData++;
//不合法情形3:内容为+
if (*pData == '\0')
return ;
}
else if (*pData == '-')
{
isNegative = true;
pData++;
//不合法情形3:内容为-
if (*pData == '\0')
return ;
} long long num = ; //设为long long检查越界
while (*pData != '\0')
{
//不合法情形5:存在非数字
if (*pData < '' || *pData > '')
return ;
else
{
num = num * + (*pData - '');
}
pData++;
} //不合法情形6:越界
num = isNegative ? - num : num;
//注意一定要加(signed int)
if (isNegative && num < (signed int)0x80000000 || !isNegative && num > 0x7FFFFFFF)
return ; isValid = true;
return num;
} void Test(const char *testNum)
{
int result = StrToInt(testNum);
if (testNum == NULL)
{
cout << "char * is Null" << endl;
cout << "input is not vaild" << endl;
cout << endl;
return;
}
cout << "Test string is: " << testNum << endl;
if (isValid)
cout << result << endl;
else
cout << "input is not vaild" << endl;
cout << endl; } int main()
{
Test(NULL); Test(""); Test(""); Test("+123"); Test("-123"); Test("1a33"); Test("+0"); Test("-0"); Test("+"); Test("-"); //有效的最大正整数, 0x7FFFFFFF
Test("+2147483647"); Test("-2147483647"); Test("+2147483648"); //有效的最小负整数, 0x80000000
Test("-2147483648"); Test("+2147483649"); Test("-2147483649"); system("pause"); return ;
}
itoa实现,最后别忘加='\0'
void itoa(int num, char *str)
{
int power = ;
int j = num; while (j / != )
{
power *= ;
j /= ;
} while (num != )
{
*str++ = '' + (num / power);
num %= power;
power /= ;
}
*str = '\0';
}
面试题49:把字符串转换成整数(atoi)的更多相关文章
- [LeetCode]面试题67. 把字符串转换成整数
题目 写一个函数 StrToInt,实现把字符串转换成整数这个功能.不能使用 atoi 或者其他类似的库函数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们 ...
- 《剑指offer》面试题67. 把字符串转换成整数
问题描述 写一个函数 StrToInt,实现把字符串转换成整数这个功能.不能使用 atoi 或者其他类似的库函数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. ...
- 17.把字符串转换成整数[atoi]
[题目] 把字符串转换成整数,需要考虑字符串有效性. [代码] C++ Code 123456789101112131415161718192021222324252627282930313233 ...
- 剑指Offer 49. 把字符串转换成整数 (字符串)
题目描述 将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数. 数值为0或者字符串不是一 ...
- [剑指Offer] 49.把字符串转换成整数
题目描述 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 数值为0或者字符串不是一个合法的数值则返回0 [思路]考虑所有特殊情况 1.数字前面有空格,如s=" 12 ...
- 【剑指Offer学习】【面试题49:把字符串转换成整数】
题目:实现一个函数stringToInt,实现把字符串转换成整数这个功能.不能使用atoi或者其它相似的库函数. 题目解析 这看起来是非常easy的题目,实现基本功能 ,大部分人都能用10行之内的代码 ...
- 《剑指offer》第六十七题(把字符串转换成整数)
// 面试题67:把字符串转换成整数 // 题目:请你写一个函数StrToInt,实现把字符串转换成整数这个功能.当然,不 // 能使用atoi或者其他类似的库函数. #include <ios ...
- Java将ip字符串转换成整数的代码
下面代码是关于Java将ip字符串转换成整数的代码,希望对各位有较大用途. public class IpUtil { public static int Ip2Int(String strIp){ ...
- 【Java】 剑指offer(67) 把字符串转换成整数
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 请你写一个函数StrToInt,实现把字符串转换成整数这个功能 ...
- Python使用函数实现把字符串转换成整数
需求:假设Python没有提供内置函数int如果使用函数方式实现把一串字符串转换成整数例如把字符串‘12345‘转换成整数12345 思路 1,字符串也是序列可以使用map函数处理分割成一个列表 2, ...
随机推荐
- Java基础之疑难知识点
问题列表: 1. Java中子类中可以有与父类相同的属性名吗? 2. Java中子类继承了父类的私有属性及方法吗? 3. Java中抽象类到底能不能被实例化? 1. Java中子类中可以有与父类相同的 ...
- C语言程序设计50例(经典收藏)
本篇文章是对C语言程序设计的50个小案例进行了详细的分析介绍,需要的朋友参考下 [程序1]题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位.十 ...
- tomcat启动时,内存溢出,Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "main"
问题原因 通过tomcat启动项目,也许是因为项目太大,配置的内存不够用了.老是报内存溢出的问题. 解决办法 1.选中项目 右键 run as ->Run Configurations... ...
- html_entity_decode() 将 HTML 实体转成字符原型
PHP html_entity_decode() 适用于PHP 4.3.0+,将HTML 实体转成字符. html_entity_decode(包含HTML 实体的字符串, 可选如何解码引号, 可选字 ...
- 你应该了解的强大CSS表达式 ----- expression
IE5及其以后版本支持在CSS中使用expression,用来把CSS属性和Javas cript表达式关联起来,这里的CSS属性可以是元素固有的属性,也可以是自定义属性.就是说CSS属性后面可以是一 ...
- Docker 初相见
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到任何流行的 Li ...
- 【AtCoder Grand Contest 012C】Tautonym Puzzle [构造]
Tautonym Puzzle Time Limit: 50 Sec Memory Limit: 256 MB Description 定义一个序列贡献为1,当且仅当这个序列 由两个相同的串拼接而成 ...
- Python读取Excel中的数据并导入到MySQL
""" 功能:将Excel数据导入到MySQL数据库 """ import xlrd import MySQLdb # Open the w ...
- POJ 1679 The Unique MST (次小生成树 判断最小生成树是否唯一)
题目链接 Description Given a connected undirected graph, tell if its minimum spanning tree is unique. De ...
- Celery异步任务队列/周期任务+ RabbitMQ + Django
一.Celery介绍和基本使用 Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理, 如果你的业务场景中需要用到异步任务,就可以考虑使用celer ...