Split string with delimiters in C

前端 未结 20 1384
你的背包
你的背包 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:23

    #include 
    #include 
    #include 
    #include 
    
    /**
     *  splits str on delim and dynamically allocates an array of pointers.
     *
     *  On error -1 is returned, check errno
     *  On success size of array is returned, which may be 0 on an empty string
     *  or 1 if no delim was found.  
     *
     *  You could rewrite this to return the char ** array instead and upon NULL
     *  know it's an allocation problem but I did the triple array here.  Note that
     *  upon the hitting two delim's in a row "foo,,bar" the array would be:
     *  { "foo", NULL, "bar" } 
     * 
     *  You need to define the semantics of a trailing delim Like "foo," is that a
     *  2 count array or an array of one?  I choose the two count with the second entry
     *  set to NULL since it's valueless.
     *  Modifies str so make a copy if this is a problem
     */
    int split( char * str, char delim, char ***array, int *length ) {
      char *p;
      char **res;
      int count=0;
      int k=0;
    
      p = str;
      // Count occurance of delim in string
      while( (p=strchr(p,delim)) != NULL ) {
        *p = 0; // Null terminate the deliminator.
        p++; // Skip past our new null
        count++;
      }
    
      // allocate dynamic array
      res = calloc( 1, count * sizeof(char *));
      if( !res ) return -1;
    
      p = str;
      for( k=0; k

提交回复
热议问题