Mehrere Fragen zu Arrays und Typecast



  • Hallo Leute,

    bin schon sehr verzweifelt inzwischen weil mein Programm soviele Fehler ausspuckt.
    Meine Fragen sind folgende:

    a) kann man Arrays mit dynamischer (=Benutzereingaben-Integer) Größe erzeugen? Wenn ja, wie ist das am einfachsten möglich?

    b) Wie kann ich einer Funktion ein Array übergeben? Die Funktion mault v.a. wieder wegen der fehlenden Größe rum...

    c) Wie kann ich einen string in einen double-Wert casten?
    .edit: Hab c) gelöst... atof(Variable.data()); ...

    Bin echt am Ende... Wer mag mir helfen? Wäre sehr dankbar... gibt n Bier ^^

    Grüße



  • Hallo,

    a)
    mit Hilfe von new
    http://tutorial.schornboeck.net/dyn_speicher.htm
    oder auch std::vector
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-143816.html
    b) bei der ersten Variante mußt du die Größe separat mit übergeben (das Array als Pointer). Bei der zweiten Variante kannst du den vector direkt (besser als konstante Referenz) übergeben.
    c)
    siehe FAQ

    Vielleicht wäre es auch hilfreiech weitere Kapitel des oben genannten Tutorials durchzuarbeiten (Referenzen, Zeiger).



  • Hmmm, Zeiger... Hab ich mir schon angetan, vermutlich zu wenig. Werde das jetzt nachholen... müssen 😞

    Zur Lösung der Arrays dynamischer Größe:
    Wow, ist ja echt einfach! Vielen Dank!

    Werde mich jetzt weiter darum kümmern... Also, wie gesagt, bin sehr dankbar!

    Grüße

    .edit:

    double streckeberechnen(string Stadt[][], int n)
    

    meine Funktion
    und

    string* arr;
    	arr = new string[numb][3];
    

    erzeugt mein array... wie übergebe ich da die Größe separat? noch nen parameter int mit übergeben der gleich numb ist?



  • Das mit der variablen Größe (und der impliziten Umwandlung Array->Pointer) funktioniert leider nur in einer Dimension, also mußt du die innere Dimension des Arrays trotzdem direkt angeben. Als Alterantive bleibt noch ein vector<vector<T> >, ein T** (den du vermutlich selber aufbereiten mußt) oder eine Indexumrechnung von 2D auf 1D.



  • Falls Boost vorhanden ist kannst du boost::multi_array verwenden für multidimensionale Arrays. Die übergabe zur Funktion erübrigt sich ja dann ebenfalls (konstante Referenz, ...). Zum umwandeln von string in double kannst du z.B. auch boost::lexical_cast verwenden, das is etwas besser als die Vorschläge im FAQ.

    grüße



  • David_pb schrieb:

    Zum umwandeln von string in double kannst du z.B. auch boost::lexical_cast verwenden, das is etwas besser als die Vorschläge im FAQ.

    Wieso das? Afaik ist boost::lexical_cast nur ein verallgemeinerter Wrapper um die stringstream-Lösung.



  • Hm, spontan fällt mir da ein: Es ist leichter zu benutzen, hat implizit automatischen unicode Support (wstringstream), wirft einen eigenen Exceptiontyp bei nicht erfolgreicher Umwandlung. 🙂

    grüße


Log in to reply