#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 20
int my_isspace(char c) {
return (c == ' ' || c == ',' || c == '.' || c == '\n');
}
int read_word(FILE *fp,char buf[N]){
int i=0;
for(i=0;i<N;i++){
buf[i] = '\0';
}
char c;
while (c
= fgetc(fp
), c
!= EOF
&& my_isspace
(c
)) ;
if (c == EOF)
return 0;
buf[0] = c;
i = 1;
while(((c
= fgetc(fp
)) != EOF
) && i
< N
- 1) { buf[i] = c;
if(my_isspace(c)){
buf[i] = '\0';
break;
}
i++;
}
if (c == EOF) {
buf[i] = '\0';
}
if (i == N - 1) {
buf[N - 1] = '\0';
}
return i;
}
struct word {
char name[N];
struct word *next;
};
void addword(struct word **root, char buf[N]) {
struct word *p;
if ((p
= malloc(sizeof(struct word
))) == 0) { printf("memory full, aborted.\n"); }
p->next = *root;
*root = p;
}
void dump(struct word *p) {
if (p == 0)
return;
dump(p->next);
}
int main() {
char buf[N];
FILE *fp;
fp
= fopen("anne_short.txt","r"); if(fp == NULL){
}
int n;
struct word *root;
root = 0;
for (;;) {
n = read_word(fp, buf);
if (n == 0)
break;
addword(&root, buf);
}
dump(root);
return 0;
}
/* end */
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoKI2RlZmluZSBOIDIwCgppbnQgbXlfaXNzcGFjZShjaGFyIGMpIHsKICByZXR1cm4gKGMgPT0gJyAnIHx8IGMgPT0gJywnIHx8IGMgPT0gJy4nIHx8IGMgPT0gJ1xuJyk7Cn0KCmludCByZWFkX3dvcmQoRklMRSAqZnAsY2hhciBidWZbTl0pewogIGludCBpPTA7CiAgZm9yKGk9MDtpPE47aSsrKXsKICAgIGJ1ZltpXSA9ICdcMCc7CiAgfQoKICBjaGFyIGM7CiAgd2hpbGUgKGMgPSBmZ2V0YyhmcCksIGMgIT0gRU9GICYmIG15X2lzc3BhY2UoYykpCiAgICA7CiAgaWYgKGMgPT0gRU9GKQogICAgcmV0dXJuIDA7CiAgYnVmWzBdID0gYzsKICBpID0gMTsKICB3aGlsZSgoKGMgPSBmZ2V0YyhmcCkpICE9IEVPRikgJiYgaSA8IE4gLSAxKSB7CiAgICBidWZbaV0gPSBjOwogICAgaWYobXlfaXNzcGFjZShjKSl7CiAgICAgIGJ1ZltpXSA9ICdcMCc7CiAgICAgIGJyZWFrOwogICAgfQogICAgaSsrOwogIH0KICBpZiAoYyA9PSBFT0YpIHsKICAgIGJ1ZltpXSA9ICdcMCc7CiAgfQogIGlmIChpID09IE4gLSAxKSB7CiAgICB1bmdldGMoYywgZnApOwogICAgYnVmW04gLSAxXSA9ICdcMCc7CiAgfQogIHJldHVybiBpOwp9CgpzdHJ1Y3Qgd29yZCB7CiAgY2hhciBuYW1lW05dOwogIHN0cnVjdCB3b3JkICpuZXh0Owp9OwoKdm9pZCBhZGR3b3JkKHN0cnVjdCB3b3JkICoqcm9vdCwgY2hhciBidWZbTl0pIHsKICBzdHJ1Y3Qgd29yZCAqcDsKICBpZiAoKHAgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCB3b3JkKSkpID09IDApIHsKICAgIHByaW50ZigibWVtb3J5IGZ1bGwsIGFib3J0ZWQuXG4iKTsKICAgIGV4aXQoMSk7CiAgfQogIHN0cmNweShwLT5uYW1lLCBidWYpOwogIHAtPm5leHQgPSAqcm9vdDsKICAqcm9vdCA9IHA7Cn0KCnZvaWQgZHVtcChzdHJ1Y3Qgd29yZCAqcCkgewogIGlmIChwID09IDApCiAgICByZXR1cm47CiAgcHJpbnRmKCIlc1xuIiwgcC0+bmFtZSk7CiAgZHVtcChwLT5uZXh0KTsKfQoKaW50IG1haW4oKSB7CiAgY2hhciBidWZbTl07CiAgRklMRSAqZnA7CgogIGZwID0gZm9wZW4oImFubmVfc2hvcnQudHh0IiwiciIpOwogIGlmKGZwID09IE5VTEwpewogICAgcHJpbnRmKCJGaWxlIHJlYWQgZXJyb3IhXG4iKTsKICAgIGV4aXQoMSk7CiAgfQoKICBpbnQgbjsKICBzdHJ1Y3Qgd29yZCAqcm9vdDsKICByb290ID0gMDsKCiAgZm9yICg7OykgewogICAgbiA9IHJlYWRfd29yZChmcCwgYnVmKTsKICAgIGlmIChuID09IDApCiAgICAgIGJyZWFrOwogICAgYWRkd29yZCgmcm9vdCwgYnVmKTsKICB9CiAgZHVtcChyb290KTsKICBmY2xvc2UoZnApOwogIHJldHVybiAwOwp9Ci8qIGVuZCAqLwo=