Stringanzahl eines Stringarrays



  • Hallo zusammen!

    Ich habe folgendes Problem. Ich habe ein Array aus Strings (std::string keine C-Strings) und möchte die Anzahl dieser in dem Array herausfinden. Für C-Strings wüsste ich eine Lösung, allerdings fällt mir bei std::string's so banal die Lösung wahrscheinlich auch sein wird keine Lösung ein.

    Danke im voraus für die Hilfe



  • Wenn du nur einen Zeiger auf das Array hast, gar nicht.

    Ansonsten:

    template <typename T, int N>
    int array_size(T (&a) [N])
    {
        return N;
    }
    


  • Sorry, aber ich habe mit Templates noch nie gearbeitet.

    Kannst du mir evtl. eine kleine Erklärung zu dem Codeschnipsel geben?

    Danke 🙂



  • Naja, es gibt die Größe N eines Arrays T[ N ] zurück ^^

    alternativ: sizeof( array ) / sizeof( array[ 0 ] )



  • daispro schrieb:

    Hallo zusammen!

    Ich habe folgendes Problem. Ich habe ein Array aus Strings (std::string keine C-Strings) und möchte die Anzahl dieser in dem Array herausfinden. Für C-Strings wüsste ich eine Lösung, allerdings fällt mir bei std::string's so banal die Lösung wahrscheinlich auch sein wird keine Lösung ein.

    Danke im voraus für die Hilfe

    Wie legst Du das Array an?



  • Okay, lassen wir mal den Parameter T weg, dann haben wir:

    template <int N>
    int array_size(std::string (&a) [N])
    {
        return N;
    }
    

    Templates sind ganz einfach Vorlagen für Funktionen. (Gibts natürlich auch für Klassen, aber hier eine Funktion) Wenn du ein Array mit 3 Elementen namens "myarray" hast, kannst du diese Funktion so aufrufen:

    array_size<3>(myarray); // gibt 3 zurück
    

    Der Compiler weiß aber natürlich, dass das Array 3 Elemente hat und ist so schlau, dass du ihm das nicht mehr hinschreiben musst (Man sagt, er kann den Template-Parameter "deduzieren".)

    Der Compiler sieht also, der Funktionsaufruf würde mit N = 3 funktionieren und erzeugt eine passende Funktion, die schlussendlich so aussieht:

    int array_size(std::string (&a) [3])
    {
        return 3;
    }
    

    Allerdings solltest du rohe Arrays in C++ nicht verwenden, es sei denn, du hast einen guten Grund dafür.


Anmelden zum Antworten