000
29.03.2005, 01:58 Uhr
cplus2group
|
Hallo
ich muss dringend eine suchmaschiene mit c++ schreiben,erst soll dies Programm ein txt Datei lesen, danach in diesem gelesenen Text Gruppe (z.B: AUT) und die Daten (z.B: Toader)suchen. Das wichtigste ist: ich muss in dem Programm STRUKTUREN (struct) benutzen. Mein Textdatei sieht wie folgendes aus und heisst plus.txt:
AUT==Toader, Joachim TIT==Kulturwissenschaft, in Japan der frühen fünfziger Jahre SIG==2000
AUT==Kuschel, Margot TIT==Politikwisenschaften in Österreich, Wirtschaft: BWL, in: Brigitte S. Huhn u. Helmut Klang (Hgg.), Frankreich 1999, S.235-278 JAH==1999 ORT==Frankreich SIG==3456
Für das Ausgangsformat für die Gruppe werden die folgende code verwendet:
SIG ==> %S AUT ==> %A TIT ==> %T JAH ==> %J ORT ==> %O
Damit wird die Ausgabe so aussehen:
%A Toader, Joachim %T Kulturwissenschaft, in Japan der frühen fünfziger Jahre %S 2000
%A Kuschel, Margot %T Politikwisenschaften in Österreich, Wirtschaftswachstum: Ein mikroökonomischer Ansatz, in: Brigitte S. Huhn u. Helmut Klang (Hgg.), Frankreich 1999, S.235-278 %J 1999 %O Frankreich %S 3456
Wenn das Programm mir fragt "Welche txt soll geöffnet werden? Soll ich schreiben "plus.txt" damit wird einmal die Datei lesen. Dann werde ich die Gruppe fragen "Welche Gruppe- z.B. TIT" und werde ich nochmal fragen "Was soll die Datei enthalten".
Am Ende die Ausgabe der Datei soll aussehen.
Ich habe für ein Programm geschrieben aber es funktioniert nicht wie ich möchte.
Ich brauche sehr dringend Info bittteeeeeee
Die Quellcode ist /*
C++: |
#include <iostream> using namespace std; #include <stdlib.h> #include <fstream> #include <string>
struct search{ struct search *danach; char gruppe[200]; int gleichgleich; int name; } ; enum zustand {imGruppe,imGleichgleich,imNamen};
struct search *loadgruppe(ifstream &data); struct search *loaderhaltene(ifstream &data); struct search *searcherhaltene(struct search *das, char *zeichnung); struct search *suchediese(struct search *das, char *diese);
int main(){ char dataname[200], befehl[200]; struct search *das=NULL, *now;
ifstream data;
cout<<"Welche Datei soll geöffnet werden?"<<endl; cin.getline(dataname,200,'\n'); data.open(dataname);
if(!data){ cout<<"Datei"<<dataname<<" nicht lesbar."<<endl; return 0; }
das=loadgruppe(data);
for(;;){ cout<<"Bitte wählen Sie:"<<endl<< " n - Gruppe"<<endl<< " z - soll enthalten"<<endl<< " * - Programm beenden"<<endl; cin.getline(befehl,200,'\n');
switch(befehl[0]){ case 'n': cout<<"Geben Sie die Gruppe ein!"<<endl; cin.getline(befehl,200,'\n'); now=searcherhaltene(das,befehl); if (now!=NULL) cout<<"Die Gruppe"<<now->gleichgleich<<" enthält."<<endl; else cout<<"Die Gruppe ist nicht bekannt!"<<endl; break; case 'z': cout<<"Was soll enthalten einer Gruppe?"<<endl; cin.getline(befehl,200,'\n'); now=suchediese(das,befehl); if (now!=NULL) cout<<"Die Gruppe "<<now->gruppe<<now->name<<" enthaelt."<<endl; else cout<<"Zu diesem Daten gibt es keinen Eintrag!"<<endl;
break; case '*': return 0; default: cout<<"Befehl "<<befehl<<" verstehe nicht"<<endl; break; }
} { int x; cin >> x; }
}
struct search *loadgruppe(ifstream &data){ struct search *das=NULL, *now, *neu;
while(!data.eof()){ neu=loaderhaltene(data); if (neu!=NULL){ if (das==NULL) das=neu; else now->danach=neu; now=neu; } } return das; }
struct search *loaderhaltene(ifstream &data){ struct search *searchdas; char puffer[200],zeichen; int zaehler; enum zustand zustand;
searchdas=new struct search; searchdas->danach=NULL;
zustand=imGruppe; zaehler=0; for (;;) { data.get(zeichen); if (data.eof()) return NULL;
switch(zeichen){ case '=': puffer[zaehler]='\0'; zaehler=0; strcmp(searchdas->gruppe,puffer); zustand=imGleichgleich; break;
case ' ': if (zustand!=imGruppe){ puffer[zaehler]='\0'; zaehler=0; searchdas->gleichgleich=atol(puffer); return searchdas; zustand=imNamen;} return 0;
case '\n': if (zustand!=imNamen) puffer[zaehler]='\0'; zaehler=0; searchdas->name=atol(puffer); return searchdas; break; default: puffer[zaehler]=zeichen; zaehler++; break;}}}
struct search *searcherhaltene(struct search *das,char *zeichnung){ while(das!=NULL){ if(!strcoll(das->gruppe,zeichnung)) return das; das=das->danach; } return NULL; }
struct search *suchediese(struct search *das, char *diese){ int suchgleichgleich, suchname,i; char *start;
for (i=0;diese[i]==' ';i++); start=diese; for (;diese[i]!='=='&& diese[i]!='\0';i++); if(diese[i]=='\0'){ cout << "Dieses kann ich nicht lesen:"<<diese<< endl; return NULL; }
diese[i]='\0'; suchgleichgleich=atol(start); i++; start=diese+i; suchname=atol(start);
while(das!=NULL){ if (das->gleichgleich == suchgleichgleich && das->name== suchname) return das; das=das->danach; } return NULL; }
|
*/
Hilfe Bitteeee Bitteeee
Mit besten Grüssen
cplus2group |