Listing 4

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <alloc.h>
#include <ctype.h>
char *test_str =
   "This is a string with a number   \tof words in\nit to test"
   "the string word parsing function."
   /* Note that the string includes words separated by multiple spaces,
   as well as newlines and tabs.    */

int wordcount(char *str)
   {
   int count = 0;
   char *s;
   s=str;
   while(*s && isspace(*s))s++;  //Skip leading spaces
   while(*s)
      {
     while(*s && !isspace(*s))
         s++;  //Skip over the word
     while(*s && isspace(*s))
         s++; //Skip over all whitespace
      count++;   //Increment count - Note it starts as 0 not 1
      }
   return(count);
   }

void str_to_ptrarray(char *orgstr, char *ptrarray[])
   {
   int i=0;
   char *s;
   s=orgstr;
   while(*s && isspace(*s))
      s++; //Leading white space
   while(*s)
      {
      ptrarray[i]=s;      //assign it
      i++;
      while(*s && !isspace(*s))
         s++; //skip over the word
      while(*s && isspace(*s))
         {  //skip over the whitespace
         *s:0; //terminate the string
         s++;
         }
      }
   }

int allocate_space(int nbr, char ***ptrarray, int size, char **string)
   {
   //Allocate the array pointers
   if( (*ptrarray= (char **)calloc(nbr,sizeof(char *))) ==NULL)
      return(0);       //Allocate the string space
   if( (*string = (char *)calloc(size+1,sizeof(char))) == NULL)
      return(0);
   return(1);
   }

void free_space(char ***ptrarray, char **string)
   {
   free(*ptrarray);
   free(*string);
   }

void main(void)
   {
   char **ptrarray;
   char *strg;
   int wordcnt;
   int size;
   size = strlen(test_str);wordcnt=wordcount(test_str);
   allocate_space(wordcnt,&ptrarray,size,&strg);
   strcpy(strg,test_str);
   str_to_ptrarray(strg,ptrarray);
   for(size = 0;size < wordcnt;size++)
      printf("%s:n",ptrarray[size]);
   free_space(&ptrarray,&strg);
   }

// End of File