ablauf problem
-
Hallo!
Ich programmiere gerade ein Programm, das eine datei.txt einlesen soll. In dieser datei.txt sind 60000 wörter. das programm soll jedes wort miteinander vergleichen und eine wortliste ausgebgen also so:
man gibt 2 parameter an:
Haus und Mars
Daraus folgt Maus!
Da sich Haus und Mars lediglich so unterscheiden....kann mir da wer helfen? thx
-
bittehilfe schrieb:
Haus und Mars
Daraus folgt Maus!warum nicht 'Hars'?
-
weil "hars" nicht in der liste ist^^
nur begriffe die in der liste sind gelten
-
Stammen denn die beiden vorgegebenen Wörter auch aus der Liste? Und was soll rauskommen, wenn "Maus" auch nicht vorkommt?
Ein allgemeiner Lösungsansatz: Du mixt die eingegebenen Wörter zu neuen Wörtern zusammen (für jedes i entscheidest du, ob du den Buchstaben aus Wort1 oder Wort2 nimmst - macht 2n mögliche Kombinationen für n Buchstaben) und suchst jeden so gebildeten Buchstabenhaufen in deiner Wortliste.
-
kannst du mir einen beispielscode geben damit ich das praktisch verstehen kann?
wörter die in der liste nicht vorkommen müssen nicht ausgegeben werden!
-
Erster Schritt - verwürfeln der Eingabewörter:
vector<string> words(const string& w1, const string& w2) { vector<string> ret; if(w1.length()!=w2.length()) return ret; //Randfrage: Was soll bei der Eingabe "Hund"+"Katze" rauskommen? //Berechne alle Vermischungen von w1 und w2 /*Den Schritt überlasse ich dir du könntest z.B. alle Werte von 0 bis 2^w1.length() in Binärdarstellung umrechnen und dann bitweise auswählen, aus welchem Wort du den nächsten Buchstaben holst */ return ret; }
Zweiter Schritt - suche der verwürfelten Wörter:
vector<string> kombi = words(wort1,wort2); sort(kombi.begin(),kombi.end()); kombi.erase(unique(kombi.begin(),kombi.end()),kombi.end());//Löschen von doppelten Elementen for(int i=0;i<kombi.size();++i) if(wordlist.find(kombi[i])!=wordlist.end()) cout<<kombi[i]<<endl;