Rocksolid Light

Welcome to novaBBS (click a section below)

mail  files  register  newsreader  groups  login

Message-ID:  

Computers are useless. They can only give you answers. -- Pablo Picasso


devel / comp.lang.c / Re: top_level_regex_token_iterator - Don't match between nested brackets

SubjectAuthor
o Re: top_level_regex_token_iterator - Don't match between nested bracketsStefan Ram

1
Re: top_level_regex_token_iterator - Don't match between nested brackets

<scanner-20220430213544@ram.dialup.fu-berlin.de>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=21570&group=comp.lang.c#21570

  copy link   Newsgroups: comp.lang.c++ comp.lang.c
Followup: comp.lang.c
Path: i2pn2.org!i2pn.org!news.swapon.de!fu-berlin.de!uni-berlin.de!not-for-mail
From: ram...@zedat.fu-berlin.de (Stefan Ram)
Newsgroups: comp.lang.c++,comp.lang.c
Subject: Re: top_level_regex_token_iterator - Don't match between nested brackets
Followup-To: comp.lang.c
Date: 30 Apr 2022 20:37:14 GMT
Organization: Stefan Ram
Lines: 71
Expires: 1 Apr 2023 11:59:58 GMT
Message-ID: <scanner-20220430213544@ram.dialup.fu-berlin.de>
References: <65facd2f-4eb1-41ba-9bc8-293e00baf5a9n@googlegroups.com>
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-Trace: news.uni-berlin.de XqH3zbUcnJKG3QDN4PVcKQx36XYN5i6TWh3XNNBWjM1x+F
X-Copyright: (C) Copyright 2022 Stefan Ram. All rights reserved.
Distribution through any means other than regular usenet
channels is forbidden. It is forbidden to publish this
article in the Web, to change URIs of this article into links,
and to transfer the body without this notice, but quotations
of parts in other Usenet posts are allowed.
X-No-Archive: Yes
Archive: no
X-No-Archive-Readme: "X-No-Archive" is set, because this prevents some
services to mirror the article in the web. But the article may
be kept on a Usenet archive server with only NNTP access.
X-No-Html: yes
Content-Language: en-US
Accept-Language: de-DE, en-US, it, fr-FR
 by: Stefan Ram - Sat, 30 Apr 2022 20:37 UTC

Newsgroups: comp.lang.c++,comp.lang.c
Followup-To: comp.lang.c

Frederick Virchanza Gotham <cauldwell.thomas@gmail.com> writes:
>std::string const str("dog, cat, fish, (frogs,toads), monkeys, elephants, (lizards, amphibians<true,1>), sharks");
>I want to split it by commas to get:
> dog
> cat
> fish
> (frogs,toads)
> monkeys
> elephants
> (lizards, amphibians<true,1>)
> sharks

#include <stdio.h>

void sink( char const * const start, char const * const top )
{ for( char const * p = start; p < top; ++p )putchar( *p );
putchar( '\n' ); }

#define START 0
#define WHITESPACE 1
#define READWORD 2
#define READPAREN 3
#define COMMA 4

int split
( char const * const string,
void( * const sink )( char const * start, char const * top ))
{ int mode = START;
char const * start = string;
for( char const * p = start;; ++p )
{ char const c = *p;
if( mode == START )
{ if( c == '(' )
{ start = p; mode = READPAREN; }
else if( c >= 'a' && c <= 'z' )
{ start = p; mode = READWORD; }
else return c; }
else if( mode == READWORD )
{ if( c >= 'a' && c <= 'z' );
else if( c == ',' || c == '\0' )
{ sink( start, p );
mode = WHITESPACE;
if( !c )return 0; }
else return c; }
else if( mode == READPAREN )
{ if( c == ')' )
{ sink( start, p+1 );
mode = COMMA; }
else if( c == '\0' )
return c; }
else if( mode == COMMA )
{ if( c != ',' )return c;
else mode = WHITESPACE; }
else if( mode == WHITESPACE )
{ if( c != ' ' )return c;
else mode = START; }}}

int main( void )
{ char const * const source =
"dog, cat, fish, (frogs,toads), monkeys, "
"elephants, (lizards, amphibians<true,1>), sharks";
int const error = split( source, sink );
if( error )printf( "\nERROR AT '%c'\n", error ); }

Newsgroups: comp.lang.c++,comp.lang.c
Followup-To: comp.lang.c

1
server_pubkey.txt

rocksolid light 0.9.8
clearnet tor