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;
    

Log in to reply