#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct vector_t {
void **v;
int length;
int size;
} vector;
vector new_v() {
vector a;
a.length = 0;
a.size = 8;
a.
v = (void **)malloc(sizeof(void *) * a.
size); return a;
}
void push_v(vector *a, void *e) {
if(a->length == a->size) {
a->size *= 2;
a
->v
= (void **)realloc(a
->v
, sizeof(void *) * a
->size
); }
a->v[a->length] = e;
a->length++;
}
void *pop_v(vector *a) {
a->length--;
return a->v[a->length];
}
void free_v(vector a) {
}
void map_v(vector a, void (*f)(void *)) {
int i;
for(i = 0; i < a.length; i++)
f(a.v[i]);
}
void printer(void *a) {
}
int main(void) {
vector v = new_v();
char str[100];
char *token, *tmp;
token
= strtok(str
, " \t\n?!,.;:-_"); while(token != NULL) {
push_v(&v, tmp);
token
= strtok(NULL
, " \t\n?!,.;:-_"); }
map_v(v, printer);
free_v(v);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoKdHlwZWRlZiBzdHJ1Y3QgdmVjdG9yX3QgewoJdm9pZCAqKnY7CglpbnQgbGVuZ3RoOwoJaW50IHNpemU7Cn0gdmVjdG9yOwoKdmVjdG9yIG5ld192KCkgewoJdmVjdG9yIGE7CglhLmxlbmd0aCA9IDA7CglhLnNpemUgPSA4OwoJYS52ID0gKHZvaWQgKiopbWFsbG9jKHNpemVvZih2b2lkICopICogYS5zaXplKTsKCXJldHVybiBhOwp9Cgp2b2lkIHB1c2hfdih2ZWN0b3IgKmEsIHZvaWQgKmUpIHsKCWlmKGEtPmxlbmd0aCA9PSBhLT5zaXplKSB7CgkJYS0+c2l6ZSAqPSAyOwoJCWEtPnYgPSAodm9pZCAqKilyZWFsbG9jKGEtPnYsIHNpemVvZih2b2lkICopICogYS0+c2l6ZSk7Cgl9CglhLT52W2EtPmxlbmd0aF0gPSBlOwoJYS0+bGVuZ3RoKys7Cn0KCnZvaWQgKnBvcF92KHZlY3RvciAqYSkgewoJYS0+bGVuZ3RoLS07CglyZXR1cm4gYS0+dlthLT5sZW5ndGhdOwp9Cgp2b2lkIGZyZWVfdih2ZWN0b3IgYSkgewoJZnJlZShhLnYpOwp9Cgp2b2lkIG1hcF92KHZlY3RvciBhLCB2b2lkICgqZikodm9pZCAqKSkgewoJaW50IGk7Cglmb3IoaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKQoJCWYoYS52W2ldKTsKfQoKdm9pZCBwcmludGVyKHZvaWQgKmEpIHsKCXByaW50ZigiJXMgIiwgKGNoYXIgKikgYSk7Cn0KCmludCBtYWluKHZvaWQpIHsKCXZlY3RvciB2ID0gbmV3X3YoKTsKCWNoYXIgc3RyWzEwMF07CgljaGFyICp0b2tlbiwgKnRtcDsKCWZnZXRzKHN0ciwgMTAwLCBzdGRpbik7Cgl0b2tlbiA9IHN0cnRvayhzdHIsICIgXHRcbj8hLC47Oi1fIik7Cgl3aGlsZSh0b2tlbiAhPSBOVUxMKSB7CgkJdG1wID0gKGNoYXIgKiltYWxsb2Moc2l6ZW9mKGNoYXIpICogKHN0cmxlbih0b2tlbikgKyAxKSk7CgkJc3RyY3B5KHRtcCwgdG9rZW4pOwoJCXB1c2hfdigmdiwgdG1wKTsKCQl0b2tlbiA9IHN0cnRvayhOVUxMLCAiIFx0XG4/ISwuOzotXyIpOwoJfQoJbWFwX3YodiwgcHJpbnRlcik7CgltYXBfdih2LCBmcmVlKTsKCWZyZWVfdih2KTsKCXJldHVybiAwOwp9Cg==