Komme nicht weiter: Doppelte Strings finden (und in Datei eintragen)



  • Hallo!

    Im Wesentlichen geht es darum doppelte Strings zu finden (die Anzahl) und diese dann in eine Datei einzutragen Diese Strings stehen in einer Datei und mein erster Schritt war, diese Datei in einen Vector einzutragen.
    Nun probiere ich aber schon die ganze Zeit rum und will diesen Vector daraufhin untersuchen ob gleiche Strings enthalten sind, Beispiel:

    Vector
    ----
    Hallo
    Heinz
    Peter
    Hallo
    Hallo
    -----

    Das artet bei mir in x forschleifen aus, wie würdet ihr das machen?



  • Hallo,

    ich würde das so machen, dass du die erst ein Set kopierst. Damit hast du dann schonmal die einzelnen Strings, und sortiert sind sie zudem. Anschließend würd ich den Vector mit dem Set vergleichen.



  • Dumme Frage: Was ist ein Set bzw. wie mache ich das?

    Damit ihr nicht denkt ich versuche es nicht selber 😉 hier meine fünfte Variante die immer noch dumm ist 😞

    for(int i=0; i<vPlayerdaten.size()-1; ++i)
    		{
    			if(vPlayerdaten[i] != "NULL")
    				for(int j=i+1; j<vPlayerdaten.size(); ++j)
    					if(vPlayerdaten[j] == vPlayerdaten[i])
    					{
    						vPlayerdaten[j] = "NULL";
    						counter+=1;
    					}
    
    			if(counter>1)
                                  // in datei eintragen
    
    			counter=0;
    		}
    


  • Hallo,

    Multiset ⚠ ist eine Menge, bei der die Elemente mehrfach vorkommen dürfen und automatisch nach ihrem Wert sortiert werden:
    Carsten war schneller 😉

    multiset<string> menge;
    multiset<string>::iterator it;
    
    menge.insert("AAB");
    menge.insert("CCC");
    menge.insert("BBA");
    
    for(it = menge.begin(); it != menge.end(); ++it)
    {
      // hier Elemente vergleichen  
    }
    
    #include <set> // nicht vergessen!
    

    MfG



  • Hallo,

    vielleicht hilft dir das:
    http://www.cppreference.com/cppset.html



  • So ganz fällt der Groschen irgendwie nicht, also gut ich soll die Strings statt in einen Vector in ein Set eintragen wo sie schon mal von alleine sortiert werden.

    Dann hätten wir

    Det
    ----
    Hallo
    Hallo
    Hallo
    Heinz
    Peter
    -----

    *grübel* und dann? Wie ist das gemeint "mit set vergleichen" ?



  • warum nicht mit map:

    map<string, int> strings;
    while (not ende) {
      str = neuer string von datei;
      ++strings[str];
    }
    


  • Umweltzeichen schrieb:

    Nun probiere ich aber schon die ganze Zeit rum und will diesen Vector daraufhin untersuchen ob gleiche Strings enthalten sind, Beispiel:

    Vector
    ----
    Hallo
    Heinz
    Peter
    Hallo
    Hallo
    -----

    Das artet bei mir in x forschleifen aus, wie würdet ihr das machen?

    a) ...
    b) sort(v.begin(),v.end()); aufrufen, damit gleiche strings beieinander stehen.
    c) die for-schleife bauen.
    die schleife ist jetzt nur noch eine und gar nicht so schwer.



  • Tut mir leid ich packs nicht, wie soll das dann mit einer forschleife gehen?!



  • Kann es sein das du denkst es ist nur 1 doppelter String enthalten?
    Dann wäre das mit einer forschleife klar, ansonsten rall ich es echt nicht



  • Umweltzeichen schrieb:

    Kann es sein das du denkst es ist nur 1 doppelter String enthalten?
    Dann wäre das mit einer forschleife klar, ansonsten rall ich es echt nicht

    //ungetestet, nur skizze
    string alt=v[0];
    string count=0;
    for(int i=1;i<v.size()){
     if(v[i]==alt){
      ++count;
     }
     else{
      cout<<alt<<' '<<count<<endl;
      count=0;
      alt=v[i];
     }
    }
    

Anmelden zum Antworten