作者: my_passion | 来源:发表于2022-09-24 23:54 被阅读0次

    <cstdlib>

    int atoi(const char* str);

    template<typename T>
    T atoi_impl(const char* str)
    {
        // (1) 走过前面若干位空格: 强转为 unsigned char -> isspace(.)
        while (std::isspace((unsigned char)(*str) ) )
            ++str;
        
        // (2) 求 符合位标志
        int sign = 1;
     
        if (*str == '+')
        {
            ++str;
        }
        else if (*str == '-')
        {
            ++str;
            sign = -1;
        }
     
        // (3) 强转为 unsigned char -> isdigit(.) 判断是数字才处理
        // [1] 取出数字 *str - '0' [2] 旧结果 成10(右边多1个0) [3] 更新结果: 加上当前 sign*  数字 
        T result = 0;
        while (std::isdigit((unsigned char)(*str) ) )
        {
            int digit = *str - '0';
            
            result *= 10;
            result += sign * digit;
            
            ++str;
        }
     
        return result;
    }
     
    int atoi(const char* str)
    {
        return atoi_impl<int>(str);
    }

    相关文章

      网友评论

          本文标题:

          本文链接:https://www.haomeiwen.com/subject/hnezortx.html