【剑指offer】字符串转换为数字,C++实现
# 题目
把字符串转换成整数
# 思路
1.功能测试
正数/复数/0
2.边界值测试
最大的正整数/最小的负整数(数据上下溢出)
3.特殊输入测试
- 空字符串“”的处理,返回0,设置非法输入
- 字符串只有符号位的处理,返回0,设置非法输入
- 输入的字符串中有非数字字符,返回0,设置非法输入
# 代码
#include <iostream>
#include <string>
using namespace std;
// 67:把字符串转换成整数
class Solution {
public:
/*全局变量*/
enum {kValid,kInvalid}; // 枚举元素(kValid=0,kInvalid=1)
int g_nStatus = kValid; // 标记是否是非法输入 /*功能函数*/
int StrToInt(string str)
{
g_nStatus = kInvalid; // 初始标记为非法输入
long long num = 0; // 存储结果
const char* cstr = str.c_str();// 指向字符数组的指针 // 判断是否是空指针和空字符串""
if( (cstr != NULL) && (*cstr != '\0') )
{
// 处理符号位
int minus = 1;
if(*cstr == '-')
{
minus = -1;
cstr++;
}
else if(*cstr == '+')
{
minus = 1;
cstr++;
} // 处理其余位
while(*cstr != '\0')
{
if(*cstr > '0' && *cstr < '9')
{
// string转int类型
g_nStatus = kValid; // 标记为合法输入
num = num*10 + (*cstr -'0'); // string转换为int类型
cstr++; // 数据上下溢出
if( ((minus>0) && (num > 0x7FFFFFFF)) ||((minus<0) && (num > 0x80000000)) )
{
g_nStatus = kInvalid; // 如果溢出,则标记为非法输入
num = 0;
break;
}
}
else
{
g_nStatus = kInvalid;
num = 0;
break;
}
} if(g_nStatus == kValid)
num = num * minus; }
cout<<(int)num<<endl;
return (int)num;
}
};
int main()
{
string str = "123";
Solution solution;
solution.StrToInt(str);
return 0;
}
【剑指offer】字符串转换为数字,C++实现的更多相关文章
- 剑指 Offer 46. 把数字翻译成字符串 + 动态规划
剑指 Offer 46. 把数字翻译成字符串 Offer_46 题目描述 题解分析 本题的解题思路是使用动态规划,首先得出递推公式如下 dp[i] = dp[i-1]+dp[i-2](如果s[i-1] ...
- 力扣 - 剑指 Offer 46. 把数字翻译成字符串
题目 剑指 Offer 46. 把数字翻译成字符串 思路1(递归,自顶向下) 这题和青蛙跳台阶很类似,青蛙跳台阶说的是青蛙每次可以跳一层或者两层,跳到第 n 层有多少种解法,而这题说的是讲数字翻译成字 ...
- 【Java】 剑指offer(46) 把数字翻译成字符串
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 给定一个数字,我们按照如下规则把它翻译为字符串:0翻译成" ...
- 剑指offer——48把数字翻译成字符串
题目要求: 给定一个数字,按照如下规则翻译成字符串:0翻译成“a”,1翻译成“b”...25翻译成“z”.一个数字有多种翻译可能,例如12258一共有5种,分别是bccfi,bwfi,bczi,mcf ...
- 每日一题 - 剑指 Offer 46. 把数字翻译成字符串
题目信息 时间: 2019-07-02 题目链接:Leetcode tag: 动态规划 难易程度:中等 题目描述: 给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 "a" ...
- 剑指 Offer 46. 把数字翻译成字符串
题目描述 给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 "a" ,1 翻译成 "b",--,11 翻译成 "l",--,25 ...
- 剑指offer字符串1
面试题5:替换空格 请实现一个函数,将一个字符串中的每个空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. class Solu ...
- leetcode46. Permutations 、47. Permutations II、 剑指offer字符串的排列
字符串排列和PermutationsII差不多 Permutations第一种解法: 这种方法从0开始遍历,通过visited来存储是否被访问到,level代表每次已经存储了多少个数字 class S ...
- 剑指offer字符串列表
字符串 面试题5:替换空格 面试题20:表示数值的字符串 面试题58:翻转字符串 面试题58(二):左旋转字符串
- 剑指 offer set 16 数字在排序数组中出现的次数
总结 1. Leetcode 上有一道题, 求某一个数字在有序数组中出现的最左位置和最右位置, 而这道题就是那题的变形
随机推荐
- wechat4j获取用户昵称乱码修复
项目对接微信公众号平台时,微信的官方给出的建议是使用wechat4j.官方建议的,自然心里踏实,但实际用起来时发现wechat4j埋有很多雷,最让人心烦意乱的就是中文乱码问题. 之前写过一篇为JAXB ...
- ThreadPoolExecutor源码浅析
目录 初始化 ctl变量 添加任务 addWorker方法 worker实现 执行任务 关闭连接池 参考 初始化 ThreadPoolExecutor重载了多个构造方法,不过最终都是调用的同一个: p ...
- LeetCode——3Sum
1. Question Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? ...
- 转:web.xml 中的listener、 filter、servlet 加载顺序及其详解
在项目中总会遇到一些关于加载的优先级问题,刚刚就遇到了一个问题,由于项目中使用了quartz任务调度,quartz在web.xml中是使用listener进行监听的,使得在tomcat启动的时候能马上 ...
- Win7旗舰版中的IIS配置asp.net 完美通过版,附代码 以及出现的 CS0016: 未能写入输出文件“c:\Windows\Microsoft.NET\Framework64\v2.0.50727\Temporary ASP.NET Files\root\8d57d
先解决问题:“c:\Windows\Microsoft.NET\Framework64\v2.0.50727\Temporary ASP.NET Files\root\8d57d 图: 其他的解决方案 ...
- jquery实现全选/全不选
//设置全选全不选$("#checkAll").click(function () { if ($("#checkAll").attr("checke ...
- 关于java 线程池 ThreadPoolExceutor 之 TestDemo
public class App { public static void main(String[] args) throws InterruptedException { System.out.p ...
- zsh 安装powerline 主题特效
查看当前使用的shell脚本是哪一种 echo $0 1. 安装Powerline 使用pip指令,安装方法: pip install powerline-status 如果没有,则先 ...
- Oracle登录被拒绝; 权限不足或用户名/口令无效
第一步: 打开CMD命令窗,输入如下命令:sqlplus "/as sysdba",回车 第二步: 输入命令:alter user sys identified by Orcl12 ...
- SpringAOP源码分析总结
1.Advisor(增强器):充当Advice和Pointcut的适配器,类似使用Aspect的@Aspect注解的类(前一章节所述).一般有advice和pointcut属性. 祖先接口为org.s ...