(剑指Offer)面试题49:把字符串转换为整数
题目:
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。
思路:
考虑+、-、空格、非数字字符,以及溢出问题
代码:
#include <iostream>
using namespace std;
enum Status {kValid=0,kInvalid};
int g_nStatus=kInvalid;
long long StrToIntCore(const char* str,bool minus){
long long num=0;
int flag=minus?-1:1;
while(*str!='\0'){
if(*str>='0' && *str<='9'){
num=num*10+flag*(*str-'0');
if((!minus && num>0x7fffffff) || (minus && (signed int)num<0x80000000)){
num=0;
break;
}
str++;
}
else{
num=0;
break;
}
}
if(*str=='\0')
g_nStatus=kValid;
return num;
}
int StrToInt(const char* str){
g_nStatus=kInvalid;
long long num=0;
bool minus=false;
if(str!=NULL && *str!='\0'){
while(*str==' '){
str++;
if(str==NULL)
return 0;
}
if(*str=='+')
str++;
if(*str=='-'){
str++;
minus=true;
}
if(*str!='\0')
num=StrToIntCore(str,minus);
}
return (int)num;
}
int main()
{
cout << StrToInt(" -998") << endl;
cout << g_nStatus <<endl;
Solution s;
cout << s.StrToInt("123") << endl;
return 0;
}
在线测试OJ:
http://www.nowcoder.com/books/coding-interviews/1277c681251b4372bdef344468e4f26e?rp=2
AC代码:
class Solution {
public:
int StrToInt(string str) {
long long num=0;
bool minus=false;
int len=str.length();
if(len==0)
return 0;
int i=0;
while(str[i]==' '){
i++;
if(i==len)
return 0;
}
if(str[i]=='+')
i++;
else if(str[i]=='-'){
minus=true;
i++;
}
int flag;
while(i<len){
flag=minus?-1:1;
if(str[i]>='0' && str[i]<='9'){
num=num*10+flag*(str[i]-'0');
if((!minus && num>0x7fffffff) || (minus && (signed int)num<0x80000000)){
num=0;
break;
}
i++;
}
else{
num=0;
break;
}
}
return (int)num;
}
};
(剑指Offer)面试题49:把字符串转换为整数的更多相关文章
- 剑指offer——面试题16:数值的整数次方
// 面试题16:数值的整数次方 // 题目:实现函数double Power(double base, int exponent),求base的exponent // 次方.不得使用库函数,同时不需 ...
- 剑指Offer面试题:26.字符串的排列
一.题目:字符串的排列 题目:输入一个字符串,打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a.b.c所能排列出来的所有字符串abc.acb.bac.bca.cab和cba. 二 ...
- 剑指Offer面试题:10.数值的整数次方
一.题目:数值的整数次方 题目:实现函数double Power(doublebase, int exponent),求base的exponent次方.不得使用库函数,同时不需要考虑大数问题. 在.N ...
- 【剑指Offer面试题】 九度OJ1510:替换空格
c/c++ 中的字符串以"\0"作为结尾符.这样每一个字符串都有一个额外字符的开销. 以下代码将造成内存越界. char str[10]; strcpy(str, "01 ...
- 剑指 Offer 20. 表示数值的字符串 + 有限状态自动机
剑指 Offer 20. 表示数值的字符串 Offer 20 常规解法: 题目解题思路:需要注意几种情况: 输入的字符串前后可能有任意多个空格,这是合法的. 正负号: (1)正负号只能出现一次. (2 ...
- 剑指Offer:面试题15——链表中倒数第k个结点(java实现)
问题描述 输入一个链表,输出该链表中倒数第k个结点.(尾结点是倒数第一个) 结点定义如下: public class ListNode { int val; ListNode next = null; ...
- 剑指offer面试题3 二维数组中的查找(c)
剑指offer面试题三:
- 剑指Offer——笔试题+知识点总结
剑指Offer--笔试题+知识点总结 情景回顾 时间:2016.9.23 12:00-14:00 19:00-21:00 地点:山东省网络环境智能计算技术重点实验室 事件:笔试 注意事项:要有大局观, ...
- C++版 - 剑指offer之面试题37:两个链表的第一个公共结点[LeetCode 160] 解题报告
剑指offer之面试题37 两个链表的第一个公共结点 提交网址: http://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46?t ...
- C++版 - 剑指offer 面试题23:从上往下打印二叉树(二叉树的层次遍历BFS) 题解
剑指offer 面试题23:从上往下打印二叉树 参与人数:4853 时间限制:1秒 空间限制:32768K 提交网址: http://www.nowcoder.com/practice/7fe2 ...
随机推荐
- Git 无法拉取,Unlink of file '.git/objects/pack/pack-***.pack' failed. Should I try again? (y/n)
现象 Git 无法拉取,提示: Unlink of file '.git/objects/pack/pack-***.pack' failed. Should I try again? (y/n) 原 ...
- maven-surefire-plugin插件
https://sq.163yun.com/blog/article/173632756223238144 目前很多项目组的测试代码工程都是采用MAVEN+TESTNG的方式构造的. 因此测试代码pr ...
- SRPG Studio 教程(一) 创建游戏及引用素材
儿时玩红白机的时候,火纹和机器人大战这类战棋类的游戏就是博主的最爱,恰逢最近steam上上架了一款SRPG Studio用于制作火纹,趁这个机会学习一下,顺便记录下来. 秉承着一个程序猿的自我修养,以 ...
- BZOJ1935 园丁的烦恼
一个二维偏序的问题,学过了三维偏序cdq分治之后觉得这个题非常的水.只需按一维排序之后再用树状数组操作即可.——by VANE #include<bits/stdc++.h> using ...
- uoj386 【UNR #3】鸽子固定器
link (似乎很久没写题解了) 题意: n个物品,每个物品有a,b两个值,给定A,B,现在最多选其中m个,要求最大化选出的物品中[b权值和的B次方-a极差的A次方]. $n\leq 2\times ...
- 利用yii2分页插件,成对取出数组数据
数组太大不好处理,切割出来处理 $ids = [1, 2, 3, 4, 5, 6, 7, 8, 9]; $count = count($ids);$size = 2; $pages = new Pag ...
- hdu 3642 体积并
题意:求三个矩形体积的并 链接:点我 枚举z #include<stdio.h> #include<iostream> #include<stdlib.h> #in ...
- 【8.19校内测试】【背包】【卡特兰数】【数位dp】
早上随便搞搞t1t3就开始划水了,t2一看就是组合数学看着肚子疼...结果t1t3都a了??感天动地. 从小到大排序,从前到后枚举i,表示i是整个背包中不选的物品中代价最小的那个,即i不选,1到i-1 ...
- noip200806火柴棒等式
试题描述: 给你n根火柴棍,你可以拼出多少个形如“A+B=C”的等式?等式中的A.B.C是用火柴棍拼出的整数(若该数非零,则最高位不能是0).用火柴棍拼数字0-9的拼法如图所示: 注意: 1)加号与等 ...
- mybatis源码分析(2)-----SqlSession创建
1. 在创建好sqlSessionFactory之后,接着就要配置sqlSession的创建. <bean id="simpleTempalte" class="o ...