Path: utzoo!utgpu!jarvis.csri.toronto.edu!cs.utexas.edu!uwm.edu!mailrus!iuvax!rutgers!texbell!nuchat!moray!urchin!p4694.f506.n106.z1.fidonet.org!Lynn.Lively From: Lynn.Lively@p4694.f506.n106.z1.fidonet.org (Lynn Lively) Newsgroups: comp.lang.c Subject: Need strtok source! Message-ID: <10757.25B7BB64@urchin.fidonet.org> Date: 19 Jan 90 19:28:48 GMT Sender: ufgate@urchin.fidonet.org (newsout1.26) Organization: FidoNet node 1:106/506.4694 - Fulcrum's Edge, Spring TX Lines: 119 In an article of <16 Jan 90 22:40:10 GMT>, ssdken@jarthur.Claremont.EDU (Ken Nelson) writes: KN>From: ssdken@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@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 #include 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); }