#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