this module defines three functions:
chomp()  strip leading whitespaces
chug() strip trailing whitespaces
strip() strip trailing and leading whitespaces

Here is the code: 
/* Strip mode. */
#define STRIP_TRAILING 0
#define STRIP_LEADING 1
#define STRIP_BOTH 2

#define strip(s) strip2((s), STRIP_BOTH)
#define chug(s) strip2((s), STRIP_TRAILING)
#define chomp(s) strip2((s), STRIP_LEADING)

char *
strip2(char *s, int how)
{
    char *p;

    /* Strip leading whitespaces. */
    if (how != STRIP_TRAILING) {
        for (p = s; *p && *p == ' '; p++)
            ;

        memmove(s, p, strlen(p) + 1);
    }

    /* Strip trailing whitespaces. */
    if (how != STRIP_LEADING) {
        for (p = s + strlen(s) - 1; p >= s && *p == ' '; p--)
            *p = '\0';
    }

    return s;
}

and a simple test program:

int
main(void)
{
    char buf[] = "    a string      ";

    printf("strip '%s'\n", strip(strdup(buf)));
    printf("chug '%s'\n", chug(strdup(buf)));
    printf("strip '%s'\n", chomp(strdup(buf)));
    return 0;
}

Best regards,
-- Davide Angelocola (dfa)


Reply via email to