题目:

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

思路:

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

代码:

#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. java 错误:无法找到或装入主类

    1. 删除找不到的jar 2. 删除src以外的文件夹

  2. poj3259(spfa)

    自己的第一道spfa,纪念一下,顺便转载一下spfa的原理.先po代码: #include <iostream> #include <queue> using namespac ...

  3. android aar jar

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha aar 是  安卓 类库项目的 二进制发行包.  文件扩展名 是 aar 专家 mave ...

  4. hdu 4119 Isabella's Message 模拟题

    Isabella's Message Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.p ...

  5. C#利用NPOI在同一个Excel文件中创建多个sheet

    借用NPOI来实现,要在同一Excel文件中创建多个sheet,只需要在同一个workbook中创建多个sheet即可.要注意的是,sheet的名字一定不能重复.下面是实现的代码: private v ...

  6. Ext中的get、getDom、getCmp、getBody、getDoc的区别

    Ext中的get.getDom.getCmp.getBody.getDoc的区别Ext中包含了几个以get开头的方法,这些方法可以用来得到文档中DOM.得到当前文档中的组件.得到Ext元素等,在使用中 ...

  7. OC中NSLog函数输出格式详解

    OC中NSLog函数输出格式详解 %@ 对象 • %d, %i 整数 • %u 无符整形 • %f 浮点/双字 • %x, %X 二进制整数 • %o 八进制整数 • %zu size_t • %p ...

  8. Druid 配置_StatFilter

    Druid内置提供一个StatFilter,用于统计监控信息. 1. 别名配置 StatFilter的别名是stat,这个别名映射配置信息保存在druid-xxx.jar!/META-INF/drui ...

  9. 汇编语言学习笔记(十二)-浮点指令----ACM

    http://blog.csdn.net/q_l_s/article/details/54909328

  10. iis实现点击文件下载而不是打开文件

    我们平时在搭建网站时,企业网站难免会做一些文档提供给用户下载,有时候我们会遇到提供EXE文件给客户下载时 客户打开文档链接时提示“无法找到该网页”也就是说我们的IIS环境不能下载EXE文件: IIS网 ...