Forums
New posts
Search forums
Members
Current visitors
Log in
Register
What's new
Search
Search
Search titles only
By:
New posts
Search forums
Menu
Log in
Register
Install the app
Install
Forums
Archive
Archive
C Programming
Newbie help on string splitting
JavaScript is disabled. For a better experience, please enable JavaScript in your browser before proceeding.
You are using an out of date browser. It may not display this or other websites correctly.
You should upgrade or use an
alternative browser
.
Reply to thread
Message
[QUOTE="CBFalconer, post: 2468869"] The following routine will do the extraction for you. Try it first with TESTING defined on compilation, and then without for your own use. With gcc you define it on the command line by: "gcc -DTESTING toksplit.c" /* ------- file toksplit.c ----------*/ #include "toksplit.h" /* copy over the next token from an input string, after skipping leading blanks (or other whitespace?). The token is terminated by the first appearance of tokchar, or by the end of the source string. The caller must supply sufficient space in token to receive any token, Otherwise tokens will be truncated. Returns: a pointer past the terminating tokchar. This will happily return an infinity of empty tokens if called with src pointing to the end of a string. Tokens will never include a copy of tokchar. A better name would be "strtkn", except that is reserved for the system namespace. Change to that at your risk. released to Public Domain, by C.B. Falconer. Published 2006-02-20. Attribution appreciated. */ const char *toksplit(const char *src, /* Source of tokens */ char tokchar, /* token delimiting char */ char *token, /* receiver of parsed token */ size_t lgh) /* length token can receive */ /* not including final '\0' */ { if (src) { while (' ' == *src) *src++; while (*src && (tokchar != *src)) { if (lgh) { *token++ = *src; --lgh; } src++; } if (*src && (tokchar == *src)) src++; } *token = '\0'; return src; } /* toksplit */ #ifdef TESTING #include <stdio.h> #define ABRsize 6 /* length of acceptable token abbreviations */ int main(void) { char teststring[] = "This is a test, ,, abbrev, more"; const char *t, *s = teststring; int i; char token[ABRsize + 1]; puts(teststring); t = s; for (i = 0; i < 4; i++) { t = toksplit(t, ',', token, ABRsize); putchar(i + '1'); putchar(':'); puts(token); } puts("\nHow to detect 'no more tokens'"); t = s; i = 0; while (*t) { t = toksplit(t, ',', token, 3); putchar(i + '1'); putchar(':'); puts(token); i++; } puts("\nUsing blanks as token delimiters"); t = s; i = 0; while (*t) { t = toksplit(t, ' ', token, ABRsize); putchar(i + '1'); putchar(':'); puts(token); i++; } return 0; } /* main */ #endif /* ------- end file toksplit.c ----------*/ /* ------- file toksplit.h ----------*/ #ifndef H_toksplit_h # define H_toksplit_h # ifdef __cplusplus extern "C" { # endif #include <stddef.h> /* copy over the next token from an input string, after skipping leading blanks (or other whitespace?). The token is terminated by the first appearance of tokchar, or by the end of the source string. The caller must supply sufficient space in token to receive any token, Otherwise tokens will be truncated. Returns: a pointer past the terminating tokchar. + This will happily return an infinity of empty tokens if called with src pointing to the end of a string. Tokens will never include a copy of tokchar. released to Public Domain, by C.B. Falconer. Published 2006-02-20. Attribution appreciated. */ const char *toksplit(const char *src, /* Source of tokens */ char tokchar, /* token delimiting char */ char *token, /* receiver of parsed token */ size_t lgh); /* length token can receive */ /* not including final '\0' */ # ifdef __cplusplus } # endif #endif /* ------- end file toksplit.h ----------*/ -- Some useful references about C: <[URL]http://www.ungerhu.com/jxh/clc.welcome.txt[/URL]> <[URL]http://www.eskimo.com/~scs/C-faq/top.html[/URL]> <[URL]http://benpfaff.org/writings/clc/off-topic.html[/URL]> <[URL]http://anubis.dkuug.dk/jtc1/sc22/wg14/www/docs/n869/[/URL]> (C99) <[URL]http://www.dinkumware.com/refxc.html[/URL]> (C-library} <[URL]http://gcc.gnu.org/onlinedocs/[/URL]> (GNU docs) <[URL]http://clc-wiki.net[/URL]> (C-info) [/QUOTE]
Verification
Post reply
Forums
Archive
Archive
C Programming
Newbie help on string splitting
Top