题解 | #把字符串转换成整数(atoi)#
把字符串转换成整数(atoi)
https://www.nowcoder.com/practice/d11471c3bf2d40f38b66bb12785df47f
#include <cstdint>
#include <string>
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param s string字符串
* @return int整型
*/
#define INT_MAX ((1<<31) -1)
#define INT_MIN (- (1 << 31))
int StrToInt(string s) {
if (s.empty())
{
return 0;
}
string str_tmp = s;
int i = 0;
//去掉无用的前导空格
for (; i < str_tmp.length(); i++) {
if (str_tmp[i] != ' ')
{
break;
}
}
str_tmp = str_tmp.substr(i, str_tmp.length() - i);
if (str_tmp.empty())
{
return 0;
}
//是否正数
bool bFalg = true;
if (str_tmp[0] == '-') {
bFalg = false;
str_tmp = str_tmp.substr(1, str_tmp.length() - 1);
}
else if (str_tmp[0] == '+') {
bFalg = true;
str_tmp = str_tmp.substr(1, str_tmp.length() - 1);
}
if (str_tmp.empty())
{
return 0;
}
for (i = 0; i < str_tmp.length(); i++) {
if (str_tmp[i] < '0' || str_tmp[i] > '9')
{
break;
}
}
//去掉后面存在多余的字符
str_tmp = str_tmp.substr(0, i);
if (str_tmp.empty())
{
return 0;
}
int64_t ret64 = 0;
for (i = 0; i < str_tmp.length(); i++)
{
ret64 = ret64 * 10 + (str_tmp[i] - '0');
if (bFalg)
{
if (ret64 > INT_MAX)
{
return INT_MAX;
}
}
else
{
if (ret64 * -1 < INT_MIN)
{
return INT_MIN;
}
}
}
if (bFalg) {
return (int)ret64;
}
return ret64 * -1;
}
};
查看10道真题和解析