C++-STL(15)-string-int-整数字符串- 整数值

    把整数字符串转换成整数值。分两部分。
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大佬

    C++-STL(15)-string-int-整数字符串- 整数值

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/328578

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月1日 下午4:45
下一篇 2023年3月1日 下午4:46

相关推荐