#include <iostream>
char* str_get(char*& s, char fch, char lch){
int k;
char* q, *p = s;
while(*s){
while(*s && (*s != fch))
++s;
if(! *s)
break;
k = 1;
for(p = s + 1; *p; ++p){
if(*p == fch)
++k;
else if(*p == lch){
if(--k < 1){
*p++ = '\0';
q = s + 1;
s = p;
return q;
}
}
}
s = p;
}
return NULL;
}
int main(void){
char s[] = "[pascal] bla [[:[perl]:]], 124hjk [game over]";
char* t;
char* p = &s[0];
while((t = str_get(p, '[', ']')) != NULL)
std::cout << t << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKY2hhciogc3RyX2dldChjaGFyKiYgcywgY2hhciBmY2gsIGNoYXIgbGNoKXsKCWludCAgIGs7CgljaGFyKiBxLCAqcCA9IHM7CgoJd2hpbGUoKnMpewoJCXdoaWxlKCpzICYmICgqcyAhPSBmY2gpKQoJCQkrK3M7CgkJaWYoISAqcykKCQkJYnJlYWs7CgoJCWsgPSAxOwoJCWZvcihwID0gcyArIDE7ICpwOyArK3ApewoJCQlpZigqcCA9PSBmY2gpCgkJCQkrK2s7CgkJCWVsc2UgaWYoKnAgPT0gbGNoKXsKCQkJCWlmKC0tayA8IDEpewoJCQkJCSpwKysgPSAnXDAnOwoJCQkJCXEgICAgPSBzICsgMTsKCQkJCQlzICAgID0gcDsKCQkJCQlyZXR1cm4gcTsKCQkJCX0KCQkJfQoJCX0KCQlzID0gcDsKCX0KCXJldHVybiBOVUxMOwp9CgoKaW50IG1haW4odm9pZCl7CgljaGFyIHNbXSA9ICJbcGFzY2FsXSBibGEgW1s6W3BlcmxdOl1dLCAxMjRoamsgW2dhbWUgb3Zlcl0iOwoKCWNoYXIqIHQ7CgljaGFyKiBwID0gJnNbMF07Cgl3aGlsZSgodCA9IHN0cl9nZXQocCwgJ1snLCAnXScpKSAhPSBOVUxMKQoJCXN0ZDo6Y291dCA8PCB0IDw8IHN0ZDo6ZW5kbDsKCXJldHVybiAwOwp9