unity3d交流群:836901775
public static int MyAtoi(string str)
{
int rlst = 0;
string vStr = GetValidStr(str);
if (string.IsNullOrEmpty(vStr)) return rlst;
if (vStr[0] == '+')
{
vStr = vStr.Substring(1);
rlst = MyAtoi_Impl(vStr);
}
else if (vStr[0] == '-')
{
vStr = vStr.Substring(1);
rlst = MyAtoi_Impl(vStr, true);
}
else
{
rlst = MyAtoi_Impl(vStr);
}
return rlst;
}
static int MyAtoi_Impl(string vStr, bool isNegativeNum = false)
{
for (int i = 0; i < vStr.Length; i++)
{
if (vStr[i] != '0')
{
vStr = vStr.Substring(i);// 去掉前边的0
break;
}
if (i == vStr.Length - 1)// 全部为0
{
return 0;
}
}
int len = vStr.Length;
if (len > 10) //最大数为10位
{
if (isNegativeNum)
{
return -(int)Math.Pow(2, 31);
}
else
{
return (int)Math.Pow(2, 31) - 1;
}
}
long v = 0;
for (int i = 0; i < len; i++)
{
v += int.Parse(vStr[i].ToString()) * (long)Math.Pow(10, len - i - 1);
}
long max = isNegativeNum ? (long)Math.Pow(2, 31) : (long)Math.Pow(2, 31) - 1;
v = v > max ? max : v;
v = isNegativeNum ? -v : v;
return (int)v;
}
static string GetValidStr(string str)
{
str = str.TrimStart();
if (string.IsNullOrEmpty(str)) return "";
if (str[0] != '+' && str[0] != '-' && (str[0] - '0' < 0 || str[0] - '0' > 9)) return ""; //开头不是'+''-'[0-9],返回。
for (int i = 1; i < str.Length; i++)
{
if (str[i] - '0' < 0 || str[i] - '0' > 9) return str.Substring(0, i);//切尾
}
return str;
}