把整数字符串转换成整数值。分两部分。
1.判断字符串以下四种为无效。
1.1三种开头,以“_”长度为1;
1.2不以"_",也不以数字开头:
1.3“A12”;以0开头"023";
1.4 每个字符 判断是否为数字 <‘0’或者>‘9’
2.转换
2.1符号单独存
2.2绝对值以负数形式出现 :32位 整形 -2147483648 2147483647 负绝对值>正绝对值
2.3溢出判断:一边遍历,一边做<minq的判断。
res<minq 溢出
res==minq cur<minr -> res+cur 肯定溢出
上代码:
//给一个整数string 转换成Int
//不能以_或者0开头
//三种开头 _ !_ 0
//非数字 <0 >9
bool isValid(string strarr)
{
if ((strarr[0] != '_') && ((strarr[0] < '0') || (strarr[0] > '9')))// 不以 _开头 且为数字
{
return false;
}
if ((strarr[0] == '_') && ((strarr.length() == 1) || (strarr[1] == '0'))) 以 _开头 且 长度1 或者后面跟0
{
return false;
}
if (strarr[0] == '_' && strarr.length() > 1) // 以 _开头 且 长度1 或者后面跟0
{
return false;
}
for (int i = 1; i < strarr.length(); i++)
{
if (strarr[i]<'0' || strarr[i]>'9')
{
return false;
}
}
return true;
}
int convert(string strarr)
{
if (strarr == ""||strarr._Equal(""))
{
return 0; //不能转
}
if (!isValid(strarr)) //有效性
{
return 0;
}
bool posi = strarr[0] == '-' ? false : true; //1.符号单独存
int minq = INT32_MIN/10;
int minr = INT32_MIN%10;
int res = 0;
int cur = 0;
for (int i = posi ? 0 : 1; i < strarr.length(); i++)
{
cur = '0' - strarr[i];
if ((res < minq) || (res == minq && cur < minr))//2.溢出两个判断条件1 <minq 2.res<miq cur<minr 前面< 后续<
{
return 0;
}
res = res * 10 + cur;
}
if (posi && res == INT32_MIN)
{
return 0;
}
return posi ? -res : res;
}
void string2char_test()
{
cout<<"123 返回 ********"<< convert("123")<<endl;
cout << "023 返回0 ****" << convert("123") << endl;
cout << "A23 返回0 ******" << convert("A23") << endl;
cout << "2147483647 返回2147483647********" << convert("2147483647") << endl;
cout << "-123 返回-123*******" << convert("-123") << endl;
cout << "2147483648 溢出返回0************" << convert("2147483648") << endl;
}
void str2int_main()
{
cout<<"*******str2int*******"<<endl;
string2char_test();
}
原文链接: https://www.cnblogs.com/jasmineTang/p/14369276.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;
也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/328578
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!