C++ most efficient way to convert string to int (faster than atoi)

后端 未结 10 969
遥遥无期
遥遥无期 2020-12-04 17:04

As mentioned in the title, I\'m looking for something that can give me more performance than atoi. Presently, the fastest way I know is

atoi(mystring.c_str(         


        
10条回答
  •  长情又很酷
    2020-12-04 17:32

    Paddy's implementation of fast_atoi is faster than atoi - without the shadow of the doubt - however it works only for unsigned integers.

    Below, I put evaluated version of Paddy's fast_atoi that also allows only unsigned integers but speeds conversion up even more by replacing costly operation * with +

    unsigned int fast_atou(const char *str)
    {
        unsigned int val = 0;
        while(*str) {
            val = (val << 1) + (val << 3) + *(str++) - 48;
        }
        return val;
    }
    

    Here, I put complete version of fast_atoi() that i'm using sometimes which converts singed integers as well:

    int fast_atoi(const char *buff)
    {
        int c = 0, sign = 0, x = 0;
        const char *p = buff;
    
        for(c = *(p++); (c < 48 || c > 57); c = *(p++)) {if (c == 45) {sign = 1; c = *(p++); break;}}; // eat whitespaces and check sign
        for(; c > 47 && c < 58; c = *(p++)) x = (x << 1) + (x << 3) + c - 48;
    
        return sign ? -x : x;
    } 
    

提交回复
热议问题