home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The C Users' Group Library 1994 August
/
wc-cdrom-cusersgrouplibrary-1994-08.iso
/
listings
/
v_09_08
/
9n08100b
< prev
next >
Wrap
Text File
|
1991-06-05
|
2KB
|
82 lines
#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);
}