JZ49_把字符串转换成整数
知识点:字符串、基础范围
题目链接
题目描述
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
输入描述:
输入一个字符串,包括数字字母符号,可以为空
返回值描述:
如果是合法的数值表达则返回该数字,否则返回0
输入: “+2147483647”
输出: 2147483647
解题思路
- int的范围是 [231 -1 , -231]
- 首先判断这个数的正负,如果正数,超过了INT_MAX,就设置为INT_MAX
- 如果是负数,且超过了INT_MAX+1, 则就置为INT_MAX+1, 最后再根据正负号,来加负号。
代码
#include "cheader.h"
class Solution {
public:
int StrToInt(string str) {
int len = str.size();
if(len == 0)
return 0;
int index = 0;
//判断最前面是不是数字、正号、负号中的一种
if(isdigit(str[index])==0&&str[index]!='+'&&str[index]!='-')
return 0;
bool symbol = true;
//标记符号
if(str[index] == '-')
symbol = false;
long long ans = 0L;
//去除符号
if(isdigit(str[index]) == 0)
index ++;
while(index < len){
if(isdigit(str[index]) == 0)
return 0;
ans = ans* 10 + str[index]- '0';
index++;
//如果大于INT_MAX,且是正数
if(symbol && ans > INT_MAX){
ans = INT_MAX;
break;
}
//大于INT_MAX+1,且是负数,我们知道负数的绝对值比正数大
if(symbol == false && ans > 1L + INT_MAX){
ans = 1L + INT_MAX;
break;
}
}
if(symbol == false)
return static_cast<int>(-ans);
else
return static_cast<int>(ans);
}
};
今天也是爱zz的一天!