#include <stdio.h>
#include <malloc.h>
struct word {
char *word;
size_t size;
};
int main(void) {
struct word *words = NULL, *current;
size_t words_size = 0;
for(;;) {
words_size++;
words
= realloc( words
, sizeof( *words
) * words_size
); current = &words[ words_size - 1 ];
if( words == NULL ) {
return -1;
}
current->word = NULL;
current->size = 0;
int c;
for(;;) {
if( c == EOF ) {
words_size--;
goto leave;
}
}
for(;;) {
if( c == '\n' ) c = ' ';
if( c == EOF ) {
words_size--;
goto leave;
}
if( c == '.' ) {
current->size += 2;
current
->word
= realloc( current
->word
, current
->size
); current->word[ current->size - 2 ] = '.';
current->word[ current->size - 1 ] = '\0';
break;
}
current->size++;
current
->word
= realloc( current
->word
, current
->size
); current->word[ current->size - 1 ] = c;
}
}
leave:
for( int i = 0; i < words_size; i++) {
printf( "%s\n", words
[i
].
word );
}
// your code goes here
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxtYWxsb2MuaD4KCnN0cnVjdCB3b3JkIHsKCgljaGFyICp3b3JkOwoJc2l6ZV90IHNpemU7Cgp9OwoKCmludCBtYWluKHZvaWQpIHsKCglzdHJ1Y3Qgd29yZCAqd29yZHMgPSBOVUxMLCAqY3VycmVudDsKCXNpemVfdCB3b3Jkc19zaXplID0gMDsKCglmb3IoOzspICB7CgkJCgkJd29yZHNfc2l6ZSsrOwoJCXdvcmRzID0gcmVhbGxvYyggd29yZHMsIHNpemVvZiggKndvcmRzICkgKiB3b3Jkc19zaXplICk7CgkJY3VycmVudCA9ICZ3b3Jkc1sgd29yZHNfc2l6ZSAtIDEgXTsKCQlpZiggd29yZHMgPT0gTlVMTCApICB7CgkJCgkJCXBlcnJvciggIm5vIG1lbSAiKTsKCQkJcmV0dXJuIC0xOwoJCQoJCX0KCQkKCQljdXJyZW50LT53b3JkID0gTlVMTDsKCQljdXJyZW50LT5zaXplID0gMDsKCQkKCQlpbnQgYzsKCQlmb3IoOzspICB7CgkJCQoJCQljID0gZ2V0Y2hhcigpOwoJCQlpZiggYyA9PSBFT0YgKSAgewoJCQkJCgkJCQlmcmVlKCBjdXJyZW50LT53b3JkICk7CgkJCQl3b3Jkc19zaXplLS07CgkJCQlnb3RvIGxlYXZlOwoJCQkJCgkJCX0KCQkJaWYoICEgaXNzcGFjZSggYyApICkgIGJyZWFrOwoJCX0KCQkKCQl1bmdldGMoIGMsIHN0ZGluICk7CgkJCgkJZm9yKDs7KSAgewoJCQkKCQkJYyA9IGdldGNoYXIoKTsKCQkJaWYoIGMgPT0gJ1xuJyApICBjID0gJyAnOwoJCQlpZiggYyA9PSBFT0YgKSAgewoJCQkJCgkJCQlmcmVlKCBjdXJyZW50LT53b3JkICk7CgkJCQl3b3Jkc19zaXplLS07CgkJCQlnb3RvIGxlYXZlOwoJCQkJCgkJCX0KCQkJaWYoIGMgPT0gJy4nICkgIHsgIAoJCQkKCQkJCWN1cnJlbnQtPnNpemUgKz0gMjsKCQkJCWN1cnJlbnQtPndvcmQgPSByZWFsbG9jKCBjdXJyZW50LT53b3JkLCBjdXJyZW50LT5zaXplICk7CgkJCQljdXJyZW50LT53b3JkWyBjdXJyZW50LT5zaXplIC0gMiBdID0gJy4nOwoJCQkJY3VycmVudC0+d29yZFsgY3VycmVudC0+c2l6ZSAtIDEgXSA9ICdcMCc7CgkJCQlicmVhazsKCQkJCgkJCX0KCQkJCgkJCWN1cnJlbnQtPnNpemUrKzsKCQkJY3VycmVudC0+d29yZCA9IHJlYWxsb2MoIGN1cnJlbnQtPndvcmQsIGN1cnJlbnQtPnNpemUgKTsKCQkJY3VycmVudC0+d29yZFsgY3VycmVudC0+c2l6ZSAtIDEgXSA9IGM7CgkJCgkJfQoJCQoJfQoJCglsZWF2ZToKCQoJCgkKCWZvciggaW50IGkgPSAwOyBpIDwgd29yZHNfc2l6ZTsgaSsrKSAgewoJCQoJCXByaW50ZiggIiVzXG4iLCB3b3Jkc1tpXS53b3JkICk7CgkJZnJlZSggd29yZHNbaV0ud29yZCApOwoJCgl9CgkKCWZyZWUoIHdvcmRzICk7CgkvLyB5b3VyIGNvZGUgZ29lcyBoZXJlCglyZXR1cm4gMDsKfQo=