面试题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, ...
随机推荐
- vue 项目代码初始化
1. <meta>补充 <head> <meta charset="utf-8"> <meta name="viewport&q ...
- 详解tomcat连接数和线程数
前言 在使用tomcat时,经常会遇到连接数.线程数之类的配置问题,要真正理解这些概念,必须先了解Tomcat的连接器(Connector). 在前面的文章 详解Tomcat配置文件server.xm ...
- maven本地库更新失败
当我们在项目中遇到有些依赖在第三方仓库特别是maven仓库里面没有的时候我们会怎么办? 答案1.通过私服,上传到公司的一个私服上然后进行下载 答案2.通过本地安装,这样非常方面进行使用,今天我们就采用 ...
- Java入门系列(三)面向对象三大特性之封装、继承、多态
面向对象综述 封装 封装的意义,在于明确标识出允许外部使用的所有成员函数和数据项,或者叫接口. 有了封装,就可以明确区分内外,使得类实现者可以修改封装内的东西而不影响外部调用者:而外部调用者也可以知道 ...
- 从咖啡馆的经营看 Web 应用的扩展
我经营着一家咖啡馆.经营成本同所用的资源成正比. 我的咖啡馆店面大概有一百平方英尺(约九平方米),雇佣了一个咖啡师,一台咖啡机. 营业能力: 每次能够服务一个顾客,用三分钟泡制一杯咖啡,算下来服务一个 ...
- jquery中美元符号命名冲突问题解决
在Jquery中,$是JQuery的别名,所有使用$的地方也都可以使用JQuery来替换,如$('#msg')等同于JQuery('#msg') 的写法.然而,当我们引入多个js库后,在另外一个js库 ...
- TED_Topic4:How I fell in love with quasars, blazars and our incredible universe
By Jedidah Isler # Background about our speaker Jedidah Isler studies blazars(耀变天体) — supermassive h ...
- Druid.io启用SQL支持
Druid.io的SQL功能虽然在试验阶段,但是也支持了大部分的功能,而且还可以通过 Avatica JDBC查看请求的json,有助于我们理解Druid.io的语法.Druid.io有个比较坑的是, ...
- [gym100956]Problem J. Sort It! BIT+组合数
source : Pertozavodsk Winter Training Camp 2016 Day 1: SPb SU and SPb AU Contest, Friday, January 29 ...
- UVA1386 【Cellular Automaton】题解
题面:UVA1386 Cellular Automaton 矩阵乘法+快速幂解法: 这是一个比较裸的有点复杂需要优化的矩乘快速幂,所以推荐大家先做一下下列洛谷题目练练手: (会了,差不多就是多倍经验题 ...