面试题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, ...
随机推荐
- 对faster rcnn 中rpn层的理解
1.介绍 图为faster rcnn的rpn层,接自conv5-3 图为faster rcnn 论文中关于RPN层的结构示意图 2 关于anchor: 一般是在最末层的 feature map 上再用 ...
- python中的协程并发
python asyncio 网络模型有很多中,为了实现高并发也有很多方案,多线程,多进程.无论多线程和多进程,IO的调度更多取决于系统,而协程的方式,调度来自用户,用户可以在函数中yield一个状态 ...
- Shell记录-Shell命令(find)
Linux中的find命令在目录结构中搜索文件,并执行指定的操作.Linux下find命令提供了相当多的查找条件,功能很强大.由于find具有强大的功能,所以它的选项也很多,其中大部分选项都值得我们花 ...
- PHP常亮
define('PI','3.14'); echo PI; 名字大写,创建后不能修改和销毁 销毁变量用unset()
- bzoj千题计划161:bzoj1589: [Usaco2008 Dec]Trick or Treat on the Farm 采集糖果
http://www.lydsy.com/JudgeOnline/problem.php?id=1589 tarjan缩环后拓扑排序上DP #include<cstdio> #includ ...
- bzoj千题计划119:bzoj1029: [JSOI2007]建筑抢修
http://www.lydsy.com/JudgeOnline/problem.php?id=1029 把任务按截止时间从小到大排序 如果当前时间+当前任务耗时<=当前任务截止时间,把这个任务 ...
- 翻译:GLSL的顶点位移贴图
翻译:GLSL的顶点位移贴图 翻译自: Vertex Displacement Mapping using GLSL 译者: FreeBlues 说明: 之所以选择这篇文档, 是因为现在但凡提到位移贴 ...
- activity 中获取控件的宽高
1.第一种方式: TextView textview3 = findViewById(R.id.textview3); textView3.post(new Runnable() { @Overrid ...
- 用Grub4dos引导,硬盘安装ArchLinux
本来在工作机上用winXP,最近想深入Linux开发,于是决定装个Linux.家里的archLinux + awesome用得很好, 于是决定在工作机上也装一套. 不想刻盘,也不想用U盘,通过Grub ...
- java保存json格式数据,保存字符串和读取字符串
1.java保存json格式数据,保存字符串和读取字符串 import java.io.*; class RWJson { public void wiite(String s, String toS ...