STL + Wörter sortiert in Liste einfügen



  • Immernoch kein 3 Zeiler, aber schon etwas schlanker 😉

    while((cin >> word),word!="end") words.push_back(word);
    


  • hmmm...die Lösung ist gut 🙂



  • Hallo,
    wozu dieses "end"? Warum nicht einfach eof als Endekennung?
    Wenn's keine Liste sein muss:

    #include <string>
    #include <set>
    #include <iterator>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    
    int main()
    {
        set<string> words((istream_iterator<string>(cin)), istream_iterator<string>());
        copy(words.begin(), words.end(), ostream_iterator<string>(cout, "\n"));
    }
    

    Alternativ:

    #include <string>
    #include <list>
    #include <iterator>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    
    int main()
    {
        list<string> words((istream_iterator<string>(cin)), istream_iterator<string>());
        words.sort();
        copy(words.begin(), words.end(), ostream_iterator<string>(cout, "\n"));
    }
    


  • ein "end" kann sichd er mensch viel besser merken, als irgendsoeine komische tastenkombination wie eof 😉



  • otze schrieb:

    ein "end" kann sichd er mensch viel besser merken, als irgendsoeine komische tastenkombination wie eof 😉

    Das Programm wird dadurch aber inflexibel. Verwende ich ganz normal eof, kann ich das Programm viel leichter "Unix-artig" mit anderen Programmen verknüpfen.
    Und btw: Warum "end" und nicht "END" oder "ende" oder "stop" oder "schluss jetzt"?
    Da schreibe ich mir doch lieber noch ein kleines Wrapper-Skript drum rum.



  • SeppSchrot schrieb:

    Immernoch kein 3 Zeiler, aber schon etwas schlanker 😉

    while((cin >> word),word!="end") words.push_back(word);
    

    Besser wäre: while((cin >> word) && word!="end")
    Denn so prüfst du den Inhalt von word wirklich nur dann, wenn auch ein Wort gelesen wurde.



  • hallo!!

    weiß zufälliger weise jemand, ob oder wie man beim erstellen von Datein variable mit in den Dateinamen schreibt?

    ofstream out("hallo%d.txt",a);
    fuznt net!
    Da erhalt ich nur eine Datei mit dem Namen: hallo%d.txt!



  • würde mich wundern, wenn das funzen würde, immerhin sind wir hier bei C++ und nicht bei C,dh sprintf artige strukturen gibt es nicht. setz dir den string am besten aus einzelnens trings via std::string oder ähnlichem zusammen.

    @Hume sicher hast du recht, mir lags gestern nacht aber eher daran, ein programm zu schreiben, was man auch ohne probleme schnell ausprobieren kann :D.
    naja, du hast halt den 3zeiler nachgeliefert. 😃

    gott, ich brauchd och endlich mal ein richtig gutes buch über die stl



  • verdammt also weisst du´s auch net!
    Ich versuch halt mit ner Schleife durchnummerierte Dateien zu erstellen!



  • verdammt also weisst du´s auch net!
    Ich versuch halt mit ner Schleife durchnummerierte Dateien zu erstellen!



  • @Hume
    habe versucht, dein beispiel mit VC6 zu kompilieren, das geht aber nicht . der Compiler stört sich an dem 'cin' und erkennt die deklaration von words nicht. was könnte man noch verbessern?

    list<string> words((istream_iterator<string>(cin)), istream_iterator<string>());
    

    : error C2061: Syntaxfehler : Bezeichner 'cin'
    : error C2066: Typumwandlung in Funktionstyp nicht erlaubt
    : error C2065: 'words' : nichtdeklarierter Bezeichner

    thx arni



  • benutz einen moderneren compiler, der vc++ ist in der hinsicht schon zu halt.

    google mal nach mingw oder Dev-C++ 🙂



  • arni schrieb:

    @Hume
    habe versucht, dein beispiel mit VC6 zu kompilieren, das geht aber nicht . der Compiler stört sich an dem 'cin' und erkennt die deklaration von words nicht.

    Ersetz mal das:

    list<string> words((), istream_iterator<string>());
    

    durch die explizite Version:

    istream_iterator<string> beg(cin), end;
    list<string> words(beg, end);
    

    Falls dein Compiler das auch nicht kann (weil der list-Ctor fälschlicherweise kein passenden Template-Ctor hat), dann so:

    istream_iterator<string> beg(cin), end;
    list<string> words;
    copy(beg, end, back_inserter(words);
    

Anmelden zum Antworten