#include #include #include #include #define max 100 struct token { char name[max]; int cat; }; int gettoken(FILE *src, struct token *tkn); int getch(FILE *src, int *ch); int main(){ FILE *source; struct token next; source=fopen("esame.txt","r"); printf("STRINGHE RICONOSCIUTE:\n\n"); while(gettoken(source,&next)) if(next.cat==0) printf("%s\n",next.name); fclose(source); system("pause"); return 0; } int gettoken(FILE *src, struct token *tkn){ int c,i=0; if((c=getc(src)) != EOF) { while(isspace(c)) c=getc(src); if(c=='/') { tkn->name[i]=c; i++; c=getc(src); goto q1; } else { while(!isspace(c) && c!=EOF) c=getc(src); tkn->cat=1; goto exit; } q1: if(isspace(c) || c == EOF) { tkn->name[i]='\0'; tkn->cat=0; goto exit; } else if(c=='*') { tkn->name[i]=c; i++; c=getc(src); goto q2; } else { while(!isspace(c) && c!=EOF) c=getc(src); tkn->cat=1; goto exit; } q2: if(c == '*') { tkn->name[i]=c; i++; c=getc(src); goto q3; } else if(islower(c) || c=='/' || c=='_' || isdigit(c)) { tkn->name[i]=c; i++; c=getc(src); goto q2; } else { while(!isspace(c) && c != EOF) c=getc(src); tkn->cat=1; goto exit; } q3: if(c == '/') { tkn->name[i]=c; i++; c=getc(src); goto q4; } else if(isdigit(c) || islower(c) || c=='*' || c=='_') { tkn->name[i]=c; i++; c=getc(src); goto q2; } else { while(!isspace(c) && c!=EOF) c=getc(src); tkn->cat=1; goto exit; } q4: if(isspace(c) || c==EOF) { tkn->name[i]='\0'; tkn->cat=0; goto exit; } else { while(!isspace(c) && c!=EOF) c=getc(src); tkn->cat=1; goto exit; } exit: tkn->name[i]='\0'; return 1; } else return 0; }