Need strtok source!
Lynn Lively
Lynn.Lively at p4694.f506.n106.z1.fidonet.org
Sat Jan 20 06:28:48 AEST 1990
In an article of <16 Jan 90 22:40:10 GMT>, ssdken at jarthur.Claremont.EDU (Ken Nelson) writes:
KN>From: ssdken at jarthur.Claremont.EDU (Ken Nelson)
KN>Date: 16 Jan 90 22:40:10 GMT
KN>Organization: Harvey Mudd College, Claremont, CA
KN>Message-ID: <3796 at jarthur.Claremont.EDU>
KN>Newsgroups: comp.lang.c
KN>
KN>Hello,
KN>
KN> I need source code for the ansi function 'strtok'. We are porting
KN> from a system that has it, to one that doesn't.
KN>
KN>
KN> Thanks for any help.
KN>
KN>
KN> Ken Nelson
KN> Principal Engineer
KN> Software Systems Design
KN> 3627 Padua Avenue
KN> Claremont, CA 91711
KN> (714) 624-2402
Ken,
Here is a function that should be able to stand in for strtok()
took me about half an hour to write. I'm including a test program too.
It seems to work as expected, but you may want to check it out a bit more
before you trust it in production.
Your Servant,
Lynn
-------------------------------------------------------------------------
#include <stdio.h>
#include <string.h>
char * mytok (char * object, char * delims);
void main ()
{
char s[256];
char delims[256];
char * wk_ptr;
while (1)
{
printf ("Enter String to search:\n");
gets (s);
printf ("Enter Delimeters to search for:\n");
gets (delims);
wk_ptr = s;
while ((wk_ptr = mytok (wk_ptr, delims)) != NULL)
{
printf ("String found: '%s'\n", wk_ptr);
wk_ptr = NULL;
}
}
}
/*
* Works like strtok()
*/
char * mytok (char * object, char * delims)
{
static char * obj_ptr = NULL;
static char * end_ptr = NULL;
char * wk_ptr;
char * min_ptr;
if (object != NULL)
{
obj_ptr = object;
end_ptr = object + strlen (object);
}
if (obj_ptr == end_ptr)
{
return (NULL);
}
min_ptr = end_ptr;
while (*delims != '\0')
{
wk_ptr = strchr (obj_ptr, *delims++);
if (wk_ptr != NULL)
{
min_ptr = (wk_ptr < min_ptr) ? wk_ptr : min_ptr;
}
}
if (min_ptr != end_ptr)
{
wk_ptr = obj_ptr;
obj_ptr = min_ptr + 1;
while (obj_ptr < end_ptr)
{
if (*obj_ptr == *min_ptr)
{
*obj_ptr++ = '\0';
}
else
{
break;
}
}
*min_ptr = '\0';
}
else
{
wk_ptr = obj_ptr;
obj_ptr = end_ptr;
}
return (wk_ptr);
}
More information about the Comp.lang.c
mailing list