String array nach Endung sortieren



  • Hallo.
    Also, ich habe folgendes Problem:
    ich schreibe zur Zeit ein Programm, dass den Inhalt einer .ini ausließt. Dann prüft, ob die einzelnen Dateien sich öffnen lassen.

    Wenn die Dateien sich öffnen lassen werden sie mit Dateipfad etc. in einem Stringarray gespeichert und in einer durchnummerierten Liste angezeigt. Nun möchte ich gerne die einzelnen Dateien anhand der Dateiendung sortieren lassen.

    Die Strings sollten in einem Array bleiben.
    Bin noch ein ziemlicher C++ Noob.

    Freue mich über eure Antworten

    mfg

    2moR



  • Jedesmal wenn du vergleichst, nimmst du dir zwei temporäre Extrastrings.
    Da kopierst du dann die beiden Endungen hinein. Also alles ab den letzten Punkt. (mir rfind und substr). (Kannst auch gleich die Rückgabewerte von substr vergleichen)



  • Gibts nicht vielleicht irgendeine funktion, die das automatisch für mich erledigt?



  • 2moR schrieb:

    Gibts nicht vielleicht irgendeine funktion, die das automatisch für mich erledigt?

    Nein.
    Noch komfortabler gehts nicht.

    MfG Spacelord



  • Spacelord schrieb:

    Nein.
    Noch komfortabler gehts nicht.

    MfG Spacelord

    Schade, dann werd ich das mal so probieren.

    Vielen Dank für eure Hilfe.



  • 2moR schrieb:

    Gibts nicht vielleicht irgendeine funktion, die das automatisch für mich erledigt?

    Nein (wie schon erwähnt), aber die STL ist wie ein Baukasten, aus dem man sich mit wenigen Bausteienen das passende zusammenstellen kann.

    In Deinem Fall sähe das vielleicht so aus:

    #include <algorithm>
    #include <iostream>
    #include <string>
    
    // --  'a' < 'b', falls die Dateiendung von 'a' < Dateiendung von 'b'
    bool suffixCompare( const std::string& a, const std::string& b )
    {   
        const char DOT = '.';
        return std::lexicographical_compare( 
            std::find( a.rbegin(), a.rend(), DOT ).base(), a.end(),
            std::find( b.rbegin(), b.rend(), DOT ).base(), b.end() );
    }
    
    // --  Anwendung
    int main()
    {
        using std::cout;
        using std::endl;
    
        std::string files[] = 
        {
            "C:/pfad1/data/beispiel.txt",
            "musik.ini",
            "malen.xml",
            "bilder.ini"
        };
        std::sort( files, files + sizeof(files)/sizeof(*files), &suffixCompare );
    
        // -- Sortiertes ausgeben
        std::copy( files, files + sizeof(files)/sizeof(*files), std::ostream_iterator< std::string >( cout, "\n" ) );
        cout << endl;
        return 0;
    }
    

    Gruß
    Werner


Anmelden zum Antworten