剑指offer——面试题:把字符串转换为整数
来源:互联网 发布:mysql应用 编辑:程序博客网 时间:2024/04/29 14:52
题目描述:将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
输入描述:
输入一个字符串,包括数字字母符号,可以为空
输出描述:
如果是合法的数值表达则返回该数字,否则返回0
示例1 :
输入
+2147483647
1a33
输出
2147483647
0
我的代码:
class Solution {public: int StrToInt(string str) { bool g_statue = true; // 判断数值为 0, 还是字符串不是一个合法的字符 的全局状态量 bool flag_valid = true; // 判断字符串是否合法 int flag = 1; // 判断第一位是正是负 long long num = 0; if(str.empty()) { flag_valid = false; // 如果为空,不合法 } if(str[0] == '0' && str.size() == 1) // 只有一个字符“0”,返回0 { return 0; // 合法.状态变量 g_statue 不变 } if(str[0] == '-') flag = -1; if(str[0] == '+') flag = 1; if(str[0] == '-' || str[0] == '+') { if(str.size() == 1) { flag_valid = false; // 如果只有一个正负号,则不合法 } else { for(int i = 1;i < str.size();++i) { if(str[i] > '0' && str[i] < '9') { num = num * 10 + flag * (str[i] - '0');// 合法的情况 if(num > 0x7FFFFFFF || num <(signed int) 0x80000000) { flag_valid = false; // 数据溢出,则不合法 break; } } else { flag_valid = false; // 如果任何一个字符串不在 ‘0’ ~ ‘9’ 之间,则不合法 break; } } } } else // 不是以 +- 号开头, { for(int i = 0;i < str.size();++i) { if(str[i] > '0' && str[i] < '9') { num = num * 10 + flag * (str[i] - '0'); // 合法的情况 if(num > 0x7FFFFFFF || num <(signed int) 0x80000000) { flag_valid = false; // 数据溢出,则不合法 break; } } else { flag_valid = false; // 如果任何一个字符串不在 ‘0’ ~ ‘9’ 之间,则不合法 break; } } } if(flag_valid == false) // 如果不合法 { g_statue = false; return 0; } else return num; }};
分析:这一题的难点主要在于确定什么情况下为无效输入。无效输入应该有以下几种情况:
(1)、空字符串或者只有一个 + 或者 -;
(2)、每一个数值字符不在 '0' ~ '9' 之间。如果第一个字符是 + 或者 - ,则需要从str[1] 开始往后遍历。如果第一个符号不是 + ,那么需要从 str[0] 开始遍历
(3)、字符串合法,但是最后生成的整数溢出了
因为题目要求,当无效的输入时,返回 0 , 但是 如果是字符串“0”,也是返回 0 。所以要使用一个全局状态变量 g_statue 来进行区分
《剑指offer》 一书上给的参考答案,函数的形参是 char * ,反而处理起来简单一些
阅读全文
1 0
- 剑指offer——面试题:把字符串转换为整数
- 剑指offer--面试题49:把字符串转换成整数
- 剑指Offer:面试题49 把字符串转换成整数
- 剑指offer 面试题49 把字符串转换成整数
- 剑指offer--面试题49:把字符串转换成整数
- 剑指offer-面试题49-把字符串转换成整数
- 剑指offer 面试题49 把字符串转换成整数
- 【剑指offer】面试题67:把字符串转换成整数
- 【剑指Offer】面试题49:把字符串转化为整数
- 《剑指Offer》面试题:将字符串转换为整数
- 剑指offer-把字符串转换为整数
- 剑指offer——面试题49:不使用atoi库函数实现把字符串转换成整数
- 剑指offer — 字符串转换为整数
- 面试题33:把字符串转换为整数
- 面试题49 把字符串转换为整数
- 面试题53:把字符串转换为整数
- 面试题 49: 把字符串转换为整数
- 面试题49. 把字符串转换为整数
- 应用程序运行慢(cpu util 高)的一种可能原因
- 基于dockerfile的运维工具ansible和nginx安装
- FreeBASIC学习笔记——第09章 预编译
- 属性动画
- 如何使用charles代理转发请求
- 剑指offer——面试题:把字符串转换为整数
- leetcode 3 Longest Substring Without Repeating Characters
- leetcode 592. Fraction Addition and Subtraction C++的stringstream的一个很好的示例
- nginx四 之缓存模块
- Access数据库的模糊查询
- Java序谈之List接口、Vector类,LinkedList类
- C++——动态数组
- 大数据学习系列之五 ----- Hive整合HBase图文详解
- Convolutional Sequence to Sequence Learning笔记