剑指offer 把字符串转化为整数
题目描述
输入描述:
输入一个字符串,包括数字字母符号,可以为空
输出描述:
如果是合法的数值表达则返回该数字,否则返回0
输入
+2147483647
1a33
输出
2147483647
0 思路:字符串转化为整数的方法num = num * 10 + str[i] - '0';
特殊情况:1、输入字符串为NULL;
2、输入字符串只有+/-;
3、转化的数字大于最大值或小于最小值;
4、输入的字符串有字母。
使用一个全局变量进行处理,因为非法情况需要返回0,但是字符串只有0时,也只能返回0,需要使用一个全局变量来进行辨别。
全部变量赋值技巧,首先赋值为true,进行程序就需要赋值为false,如果没有进行运算,说明是非法情况1、2,调用函数后,
如果是最大最小值退出的情况,全部变量也是false,只有正常处理完字符串遇到\0之后,才能修改全局变量,变为true。
class Solution {
public:
bool status = false;//false是非法的,true是合法的
/*1 输入为空
2 输入含有字母
3 输入只有+-
4最大最小值超限
*/
long long solution(char* str,int minus){
long long num = ;
int i = ;
for(i = ;str[i] != '\0';++i){
if(str[i] >= '' && str[i] <= ''){//是数字就计算
num = num * + str[i] - '';
/*if(minus && num > 0x7FFFFFFF || !minus && -num < (signed int) 0x80000000){
num = 0;
break;
}*/
}
else{//不是数字就退出
num = ;
break;
}
}
if(str[i] == '\0'){
status = true;
}
return minus == - ? -num : num;
}
int StrToInt(string str) {
if(str.size() == ){
return ;
}
//find + / -
status = true;
int minus = ;
char *p = new char(str.size() + );
char * tmp = p;
strcpy(p,str.c_str());//首先判断是正数还是负数
if(p[] == '+'){
minus = ;
++p;
}
if(p[] == '-'){
minus = -;
++p;
}
int result = ;//首先初始化为0,如果只有一个+/-那么不会调用函数直接返回0
if(*p != '\0'){//可以判断只有一个+/-
result = solution(p,minus);
}
delete[] tmp;//删除首地址开始的那一片内存地址。
return result;
}
};
delete删除的必须是首地址,因为p已经发生了移位操作不是首地址了,所以需要最开始的保存首地址。
剑指offer 把字符串转化为整数的更多相关文章
- 剑指offer——把字符串转换成整数(c++)
题目描述请你写一个函数StrToInt,实现把字符串转换成整数这个功能.当然,不能使用atoi或者其他类似的库函数. 示例 1:输入: " -42"输出: -42解释: 第一个非空 ...
- 剑指Offer 把字符串转换成整数
题目描述 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 数值为0或者字符串不是一个合法的数值则返回0 输入描述: 输入一个字符串,包括数字字母符号,可以为空 输出描述: 如果是合法 ...
- 剑指Offer——把字符串转换成整数
题目描述: 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 数值为0或者字符串不是一个合法的数值则返回0 输入描述: 输入一个字符串,包括数字字母符号,可以为空 输出描述: 如果 ...
- 剑指Offer:字符串排列【38】
剑指Offer:字符串排列[38] 题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bc ...
- 剑指 Offer 43. 1~n 整数中 1 出现的次数 + 数位模拟 + 思维
剑指 Offer 43. 1-n 整数中 1 出现的次数 Offer_43 题目描述 题解分析 java代码 package com.walegarrett.offer; /** * @Author ...
- 剑指 Offer 38. 字符串的排列 + 无重复元素的全排列
剑指 Offer 38. 字符串的排列 Offer_38 题目描述 解题思路 可以使用递归实现全排列,每次都确定一个数的位置,当所有位置的数都确定后即表示一个排列. 但是考虑到本题需要排除重复的排列, ...
- 剑指 Offer 38. 字符串的排列
剑指 Offer 38. 字符串的排列 输入一个字符串,打印出该字符串中字符的所有排列. 你可以以任意顺序返回这个字符串数组,但里面不能有重复元素. 示例: 输入:s = "abc" ...
- 【剑指Offer】字符串的排列 解题报告(Python)
[剑指Offer]字符串的排列 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://www.nowcoder.com/ta/coding-interviews 题 ...
- 剑指offer 67. 字符串转换为整数(Leetcode 8. String to Integer (atoi))
题目:剑指offer 67题 需要考虑的情况:空指针.nullptr.空字符串"".正负号.数值溢出.在写代码的时候对这些特殊的输入都定义好合理的输出.可以定义一个全局布尔型变量g ...
随机推荐
- K8S-OVS使用Openvswitch为提供SDN功能支持单租户模式和多租户模式
k8s-ovs ============================== 最近在寻求一些工作机会,如果有kubernetes相关研发招聘的朋友,欢迎随时联系我.我的个人简历可以通过百度网盘:htt ...
- PAT T1022 Werewolf
暴力搜索加剪枝~ #include<bits/stdc++.h> using namespace std; ; int a[maxn]; bool visit[maxn]; vector& ...
- PAT T1014 Circles of Friends
大水题,dfs判连通块的数量,bfs每个点找朋友圈的最大直径~ #include<bits/stdc++.h> using namespace std; ; vector<int&g ...
- P1045麦森数
P1045麦森数 #include<iostream> #include <cmath> #include <cstring> const int maxn = 1 ...
- LeetCode 141. Linked List Cycle(判断链表是否有环)
题意:判断链表是否有环. 分析:快慢指针. /** * Definition for singly-linked list. * struct ListNode { * int val; * List ...
- WebVR大潮来袭时,前端开发能做些什么
WebVR大潮来袭时,前端开发能做些什么? WebVR即web + VR的体验方式,我们可以戴着头显享受沉浸式的网页,新的API标准让我们可以使用js语言来开发.本文将介绍如何快速开发一个We ...
- linux命令系列-mv(移动-重命名)
#常用命令选项 默认覆盖 -n 不覆盖 -i 交互 -f 不交互直接覆盖 -u 只移动新的文件 -v 显示详细信息 #移动覆盖3个文件到/tmp目录 mv a.txt b.txt c.txt /tmp ...
- sql数据库的基本操作
命令行 1.显示当前数据库服务器中的数据库列表:mysql> SHOW DATABASES;2.建立数据库:mysql> CREATE DATABASE 库名;3.建立数据表:mysql& ...
- Linux 运维常用命令
参考: https://segmentfault.com/a/1190000009745139 http://blog.51cto.com/xuqq999/774714 .查看有多少个IP访问: aw ...
- Python中turtle绘图学习笔记和实例
一.既然本次讲的主角是turtle函数库,那肯定得先了解一下它是什么 turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x.纵轴为y的坐标系原点,(0,0)位 ...