How do I trim leading/trailing whitespace in a standard way?

后端 未结 30 2609
一个人的身影
一个人的身影 2020-11-22 02:06

Is there a clean, preferably standard method of trimming leading and trailing whitespace from a string in C? I\'d roll my own, but I would think this is a common problem wit

30条回答
  •  夕颜
    夕颜 (楼主)
    2020-11-22 02:42

    Very late to the party...

    Single-pass forward-scanning solution with no backtracking. Every character in the source string is tested exactly once twice. (So it should be faster than most of the other solutions here, especially if the source string has a lot of trailing spaces.)

    This includes two solutions, one to copy and trim a source string into another destination string, and the other to trim the source string in place. Both functions use the same code.

    The (modifiable) string is moved in-place, so the original pointer to it remains unchanged.

    #include 
    #include 
    
    char * trim2(char *d, const char *s)
    {
        // Sanity checks
        if (s == NULL  ||  d == NULL)
            return NULL;
    
        // Skip leading spaces        
        const unsigned char * p = (const unsigned char *)s;
        while (isspace(*p))
            p++;
    
        // Copy the string
        unsigned char * dst = (unsigned char *)d;   // d and s can be the same
        unsigned char * end = dst;
        while (*p != '\0')
        {
            if (!isspace(*dst++ = *p++))
                end = dst;
        }
    
        // Truncate trailing spaces
        *end = '\0';
        return d;
    }
    
    char * trim(char *s)
    {
        return trim2(s, s);
    }
    

提交回复
热议问题