题目:

将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。

思路:

考虑+、-、空格、非数字字符,以及溢出问题

代码:

#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:把字符串转换为整数的更多相关文章

  1. 剑指offer——面试题16:数值的整数次方

    // 面试题16:数值的整数次方 // 题目:实现函数double Power(double base, int exponent),求base的exponent // 次方.不得使用库函数,同时不需 ...

  2. 剑指Offer面试题:26.字符串的排列

    一.题目:字符串的排列 题目:输入一个字符串,打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a.b.c所能排列出来的所有字符串abc.acb.bac.bca.cab和cba. 二 ...

  3. 剑指Offer面试题:10.数值的整数次方

    一.题目:数值的整数次方 题目:实现函数double Power(doublebase, int exponent),求base的exponent次方.不得使用库函数,同时不需要考虑大数问题. 在.N ...

  4. 【剑指Offer面试题】 九度OJ1510:替换空格

    c/c++ 中的字符串以"\0"作为结尾符.这样每一个字符串都有一个额外字符的开销. 以下代码将造成内存越界. char str[10]; strcpy(str, "01 ...

  5. 剑指 Offer 20. 表示数值的字符串 + 有限状态自动机

    剑指 Offer 20. 表示数值的字符串 Offer 20 常规解法: 题目解题思路:需要注意几种情况: 输入的字符串前后可能有任意多个空格,这是合法的. 正负号: (1)正负号只能出现一次. (2 ...

  6. 剑指Offer:面试题15——链表中倒数第k个结点(java实现)

    问题描述 输入一个链表,输出该链表中倒数第k个结点.(尾结点是倒数第一个) 结点定义如下: public class ListNode { int val; ListNode next = null; ...

  7. 剑指offer面试题3 二维数组中的查找(c)

    剑指offer面试题三:

  8. 剑指Offer——笔试题+知识点总结

    剑指Offer--笔试题+知识点总结 情景回顾 时间:2016.9.23 12:00-14:00 19:00-21:00 地点:山东省网络环境智能计算技术重点实验室 事件:笔试 注意事项:要有大局观, ...

  9. C++版 - 剑指offer之面试题37:两个链表的第一个公共结点[LeetCode 160] 解题报告

    剑指offer之面试题37 两个链表的第一个公共结点 提交网址: http://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46?t ...

  10. C++版 - 剑指offer 面试题23:从上往下打印二叉树(二叉树的层次遍历BFS) 题解

    剑指offer  面试题23:从上往下打印二叉树 参与人数:4853  时间限制:1秒  空间限制:32768K 提交网址: http://www.nowcoder.com/practice/7fe2 ...

随机推荐

  1. noip2012疫情控制 题解

    题目大意 给出一棵n个节点的树,根是1,要在除根节点以外的点建立检查点,使得从每条根到叶子的路径上都至少存在一个检查点.检查点由军队来建立.初始军队的位置是给定的,移动军队走一条边需要花费这条边的权值 ...

  2. UVA11107 Life Forms --- 后缀数组

    UVA11107 Life Forms 题目描述: 求出出现在一半以上的字符串内的最长字符串. 数据范围: \(\sum len(string) <= 10^{5}\) 非常坑的题目. 思路非常 ...

  3. POJ2222 Keywords Search AC自动机模板

    http://acm.hdu.edu.cn/showproblem.php?pid=2222 题意:给出一些单词,求多少个单词在字符串中出现过(单词表单词可能有相同的,这些相同的单词视为不同的分别计数 ...

  4. Python turtle绘图实例分析

    画一个红色的五角星 from turtle import * color('red','red') begin_fill() for i in range(5): fd(200) rt(144) en ...

  5. 为什么java的构造方法中this()或者super()要放在第一行

    java的构造方法中如果自己显性的调用super()的时候一定要放在第一行,如不是的话就会报错. 为什么一定要在第一行? super()在第一行的原因就是: 子类有可能访问了父类对象, 比如在构造函数 ...

  6. BZOJ 4517: [Sdoi2016]排列计数 错排公式

    4517: [Sdoi2016]排列计数 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4517 Description 求有多少种长度为 ...

  7. Eclipse打开.class文件

    1.准备材料 jad.exe    下载地址  https://varaneckas.com/jad/,根据系统去选择(就当是废话)  下载下来的是jad158g.win.zip压缩文件,解压后有个j ...

  8. 开源数据库 H2, HSQLDB, DERBY, PostgreSQL, MySQL区别/对比图表( 附加翻译) h2数据库

    开源数据库 H2, HSQLDB, DERBY, PostgreSQL, MySQL区别/对比图表 浪天涯博主翻译: referential integrity 参考完整性transactions 事 ...

  9. Switching regulator forms constant-current source

    Many applications require current sources rather than voltage sources. When you need a high-current ...

  10. LT1072 -- Wide-range voltage regulator automatically selects operating mode

    The circuit in Figure 1 delivers programming voltages to an EEPROM under the control of an external ...