//Copyright 2004 @ Matthias Jauernig #include #include #include #define MAX_CH 500 typedef struct ELEMENT { struct ELEMENT *next; char *zeichenkette; } element; element *einfuegen(const char*, element*); void ausgabe(element*); void durchmustern(element*, const char*); char my_strfind(const char*, const char*); int main(int argc, char **argv){ char tmp[MAX_CH]; element *akt, *kopf=NULL; if(argc==1){ printf("Beim Aufruf bitte den zu suchenden String angeben!\n\n"); return 1; } while(fgets(tmp,MAX_CH,stdin)!=NULL){ tmp[strlen(tmp)-1]='\0'; if(kopf==NULL){ kopf=einfuegen(tmp,kopf); akt=kopf; } else akt=einfuegen(tmp,akt); } ausgabe(kopf); durchmustern(kopf,argv[1]); return 0; } element *einfuegen(const char *tmp, element *akt){ element *neu=(element*)malloc(sizeof(element)); neu->zeichenkette=(char*)malloc((strlen(tmp)+1)*sizeof(char)); strncpy(neu->zeichenkette,tmp,strlen(tmp)+1); neu->next=NULL; if(akt!=NULL) akt->next=neu; return neu; } void ausgabe(element *akt){ printf("\nsequentielle Ausgabe:\n"); while(akt){ printf("%s\n",akt->zeichenkette); akt=akt->next; } printf("\n"); } void durchmustern(element *akt, const char *zk){ int listenelement=1; printf("\"%s\" gefunden in:\n",zk); while(akt){ if(my_strfind(akt->zeichenkette,zk)) printf("Zeile %3d: %s\n",listenelement,akt->zeichenkette); listenelement++; akt=akt->next; } } char my_strfind(const char *orig, const char *teil){ int i=0,j=0; while(i