Arraygröße und -namen



  • 1: Wie kann ich bei einem Array zur Laufzeit festlegen, wie groß es sein soll?

    2: Kann man integer-Werte als Variablennamen benutzen?
    Z.B:
    int Zahl = 1;
    int (Wert von Zahl);



    char* chArr = new char [beliebige_groesse];
    // arbeiten mit chArr
    delete[] chArr; // nicht vergessen
    
    1. Nein

    MfG SideWinder



  • Gibt es keine Möglichkeit einen Variablenwert in einen Namen einzubauen? Auch nicht wenn ich damit eine Datei benenne, in die ich werte schreiben will?



  • Gnom schrieb:

    Gibt es keine Möglichkeit einen Variablenwert in einen Namen einzubauen? Auch nicht wenn ich damit eine Datei benenne, in die ich werte schreiben will?

    int var123 = 123;

    *scnr



  • Geht, aber nur zur compiletime

    #define VALASNAME(val) val##_ = val
    
    //Anwendung:
    int VALASNAME( 123 );
    
    cout << 123_;
    

    Abgesehen davon machst du gerade absoluten Müll, sowas braucht man _nie_, hörst du _nie_. Du kommst sicher von PHP und dort verwendet man das auch nur wenn man keine Ahnung vom Programmieren hat. Denn wie gesagt man braucht es _nie_, wenn man sowas braucht, dann will man in Wahrheit nen assoziativen Container.



  • Wenn du eine Datei anlegen willst die die Zahl als Namen hat, geht das so:

    int i = 12345;
    string valasstring;
    stringstream ipreter;
    ipreter << i;
    ipreter >> valasstring;
    
    ofstream out( valasstring.c_str() );
    


  • SCNR schrieb:

    Geht, aber nur zur compiletime

    #define VALASNAME(val) val##_ = val
    
    //Anwendung:
    int VALASNAME( 123 );
    
    cout << 123_;
    

    Abgesehen davon machst du gerade absoluten Müll, sowas braucht man _nie_, hörst du _nie_. Du kommst sicher von PHP und dort verwendet man das auch nur wenn man keine Ahnung vom Programmieren hat. Denn wie gesagt man braucht es _nie_, wenn man sowas braucht, dann will man in Wahrheit nen assoziativen Container.

    Das funktioniert nicht, da in C++ ein Bezeichner nicht mit einer Zahl beginnen darf. Wenn, dann also _##val. Und dann haste genau das, was ich bereits gepostet habe.



  • interpreter schrieb:

    SCNR schrieb:

    Geht, aber nur zur compiletime

    #define VALASNAME(val) val##_ = val
    
    //Anwendung:
    int VALASNAME( 123 );
    
    cout << 123_;
    

    Abgesehen davon machst du gerade absoluten Müll, sowas braucht man _nie_, hörst du _nie_. Du kommst sicher von PHP und dort verwendet man das auch nur wenn man keine Ahnung vom Programmieren hat. Denn wie gesagt man braucht es _nie_, wenn man sowas braucht, dann will man in Wahrheit nen assoziativen Container.

    Das funktioniert nicht, da in C++ ein Bezeichner nicht mit einer Zahl beginnen darf. Wenn, dann also _##val. Und dann haste genau das, was ich bereits gepostet habe.

    Stimmt ja, gar nicht mehr dran gedacht, wollte den underscore am Ende machen, da am Anfang ja reserviert ist. Dann ist deine Variante natürlich die bessere.



  • SNCR schrieb:

    Wenn du eine Datei anlegen willst die die Zahl als Namen hat, geht das so:

    int i = 12345;
    string valasstring;
    stringstream ipreter;
    ipreter << i;
    ipreter >> valasstring;
    
    ofstream out( valasstring.c_str() );
    

    Wobei sich das noch verkürzen lässt:

    int i = 12345;
    
    stringstream ipreter;
    ipreter << i;
    
    ofstream out( valasstring.str().c_str() );
    


  • groovemaster schrieb:

    Wobei sich das noch verkürzen lässt:

    int i = 12345;
    
    stringstream ipreter;
    ipreter << i;
    
    ofstream out( valasstring.str().c_str() );
    

    manchmal ist c++ zum weglaufen unelegant.



  • volkard schrieb:

    manchmal ist c++ zum weglaufen unelegant.

    Wieso? Wenn du willst, kannst du zur Not auch Boost benutzen und

    int i = 12345;
    ofstream out( lexical_cast<string>(i).c_str() );
    

    schreiben. 😃


Anmelden zum Antworten