Split string with delimiters in C

前端 未结 20 1442
你的背包
你的背包 2020-11-21 11:56

How do I write a function to split and return an array for a string with delimiters in the C programming language?

char* str = \"JAN,FEB,MAR,APR,MAY,JUN,JUL,         


        
20条回答
  •  一个人的身影
    2020-11-21 12:27

    Method below will do all the job (memory allocation, counting the length) for you. More information and description can be found here - Implementation of Java String.split() method to split C string

    int split (const char *str, char c, char ***arr)
    {
        int count = 1;
        int token_len = 1;
        int i = 0;
        char *p;
        char *t;
    
        p = str;
        while (*p != '\0')
        {
            if (*p == c)
                count++;
            p++;
        }
    
        *arr = (char**) malloc(sizeof(char*) * count);
        if (*arr == NULL)
            exit(1);
    
        p = str;
        while (*p != '\0')
        {
            if (*p == c)
            {
                (*arr)[i] = (char*) malloc( sizeof(char) * token_len );
                if ((*arr)[i] == NULL)
                    exit(1);
    
                token_len = 0;
                i++;
            }
            p++;
            token_len++;
        }
        (*arr)[i] = (char*) malloc( sizeof(char) * token_len );
        if ((*arr)[i] == NULL)
            exit(1);
    
        i = 0;
        p = str;
        t = ((*arr)[i]);
        while (*p != '\0')
        {
            if (*p != c && *p != '\0')
            {
                *t = *p;
                t++;
            }
            else
            {
                *t = '\0';
                i++;
                t = ((*arr)[i]);
            }
            p++;
        }
    
        return count;
    }
    

    How to use it:

    int main (int argc, char ** argv)
    {
        int i;
        char *s = "Hello, this is a test module for the string splitting.";
        int c = 0;
        char **arr = NULL;
    
        c = split(s, ' ', &arr);
    
        printf("found %d tokens.\n", c);
    
        for (i = 0; i < c; i++)
            printf("string #%d: %s\n", i, arr[i]);
    
        return 0;
    }
    

提交回复
热议问题