//将字符串s转化成对应类型,若转化成功,将值赋给result,并返回true;若转化失败,返回false。
bool TryParse(string s, int& result)
{
bool negative = false;
int sign = 0;// sign == 1 这个空格前有数字了
int sign0 = 0;//sign0=2说明之间这个数字前有空格了且空格前还有数字。
if (s.empty())
{
return false;
}
if (s[0] == '-')
{
s.erase(0, 1);
negative = true;
if (s .size()==0||s[0]==' ')
return false;
}
for (int i = 0; i < s.length(); i++)//空格:32 0:48 9:57
{
int cresult = s[i];
if (cresult == 32)
{
if (i == 0)
sign0 = 1;
else if (sign == 1)//这个空格前有数字了
{
sign0 = 2;
}
}
else if (s[i] < 48 || s[i]>57)
{
return false;
}
else//数字
{
sign = 1;
if (sign0 == 2)//再次遇到隔空格的数字
return false;
}
}
//删除全部空格,不然" "会认为true
int sign1 = -1;
while ((sign1 = s.find(' ')) != string::npos)
{
s.erase(sign1,1);
}
if (s.empty()) return false;//只有空格返回false
//这个数字合格
result = strtol(s.c_str(), nullptr, 10);//同时改变这个需要转换值
if (negative == true)
result = (-result);
return true;
}
自己测试多种字符串了可以和c#一样结果。