43.把字符串转换成整数
题目内容:
代码及思路:
#include<iostream>
#include<string>
using namespace std;
class Solution
{
public:
//为了区分非法输入设置一个全局变量设为特属于标记
//当输入为“0”。则返回0不会设置全局变量,即变量为0,否则非法时(即输入空字符串时)则全局变量为1
enum Status{kvalid=0,kinvalid};
int nStatus = kvalid;
int StrToInt(string str)
{
nStatus = kinvalid;
//首先对字符串的有效性进行判断,因为题目要求如果string不符合数字要求返回0
int i = 0;
long long num = 0;
if (!str.empty() && str[i] != '\0')
{
bool minus = false;
//判断整数的正负号
if (str[i] == '+')
i++;
else if (str[i] == '-')
{
i++;
minus = true;
}
//主体部分,对字符转为整数
while (str[i] != '\0')
{
//对字符范围进行判断
if (str[i] >= '0'&&str[i] <= '9')
{
int flag = minus ? -1 : 1;
num = num * 10 + flag*(str[i] - '0');
//对数字是否溢出进行判断,最大正整数位0X7FFF FFFF,最大负整数为0X 8000 0000
//当为正时,minus=true,当为负时,minus=false
if ((!minus&&num > 0x7FFFFFFF) || (minus&&num <(signed int) 0x80000000))
{
//无效输出为0
num = 0;
break;
}
i++;
}
else
{
num = 0;
break;
}
}
if (str[i] == '\0')
{
nStatus = kvalid;
}
return (int)num;
}
}
};
void main()
{
Solution* object = new Solution;
string str;
getline(cin, str);
int res = object->StrToInt(str);
cout << res << endl;
}