int zusammenführen



  • Moin, ich hab da mal ne Frage und zwar will ich bzw. muss ich zwei int Werte zusammenführen, also nicht addieren, sonder daraus der Zahlenfolge folgend einen neuen machen. Beispiel
    int werta = 2;
    int wertb = 4;

    dann soll int wert_neu = 24; sein, also quasi die Zahlen hintereinander geschrieben.

    Wie bekommt man das hin, dass das dann auch ein int ist und nicht nen string oder so werden muss?



  • Also ich wuerde die beiden int werte in ein charfeld schreiben.
    ( mit einer %10 schleife nicht so ein problem)

    Dann die laenge der charfeldes bestimmen und wieder zurueck einen intwert
    erzeugen

    24 und 58 in eine char feld temp[ 2, 4, 5, 8, '\0']

    neuer intwert

    2458

    wenn das zu kurz war einfach bescheid sagen, bin halt von natur aus etwas schreibfaul



  • Man Multipliziere den 2. Wert mit 10, den 3. mit 100, den 4. mit 1000...
    😉



  • Okay, danke erstmal für die Lösung nur noch eine Frage, das %10 brauch ich dazu, das ich nur einzelne Zahlen habe, die in das Charfeld kommen ja? Da hapert es noch etwas beimir, wie ich das genau einbauen soll, wenn du da etwas detaillierter nochmal drauf eingehen könntest wäre es super. Danke



  • nehmen wir mal 344 als beispiel

    #include ....
    
    void Pilles_moduloschleife
    {
        char[10] //duerfte reichen
        int zahl1 = 344;
        int i     = 0;
    
    while(zahl1)
    {
    char[i] = zahl1 % 10; // 344 % 10 ist 4 also von hintan nach vorn im char feld
    i++;
    zahl1 /= 10;
    }
    
    }
    

    schon fertig 🙂

    also ja die modulo schleif ist um die einzelnen ziffern zu bekommen.

    Viel spass damit und achtung du hast die Ziffern zum schluss falsch rum im charfeld stehen

    344 und 256 ---> charfeld [ 4 , 4, 3, 6, 5 ,2]

    Bis denne
    Pilger



  • haeger12 schrieb:

    Beispiel
    int werta = 2;
    int wertb = 4;

    dann soll int wert_neu = 24; sein

    Hallo Häger,

    nutze die STL; z.B. std::stringstream

    #include <iostream>
    #include <sstream>
    
    int main()
    {
        using namespace std;
    
        int werta = 12;
        int wertb = 4;
        int wert_neu;
        stringstream buf;
        buf << werta << wertb;
        buf >> wert_neu;
    
        cout << "wert_neu = " << wert_neu << endl;
        return 0;
    }
    

    Gruß
    Werner



  • damit hast du dann auch gleich den unterschied zwischen Ansi C und
    C++.

    🙂

    Hab da noch son paar C-Relikte im Kopf 😉



  • du kannst die zahl die zuerst stehen soll einfach mit der entsprechenden n*10 multiplizieren und dann einfach die zweite zahl addieren....
    warum macht ihr das so kompliziert?



  • Kompliziert is immer besser 😕



  • Kuldren schrieb:

    du kannst die zahl die zuerst stehen soll einfach mit der entsprechenden n*10 multiplizieren und dann einfach die zweite zahl addieren....
    warum macht ihr das so kompliziert?

    vielleicht verstehe ich dich nciht, aber dann wäre:
    int a=3;
    int b=4;
    34

    aber

    int a=30;
    int b=40;
    340 und nicht 3040!



  • nei er meint n = anzahl zifern

    256 34 sind 5 zifern

    Ergebnis gleich

    2 * 10^5 + 5*10^4 etc.

    guter Einwand 🙂

    manchmal denkt man halt bissl verquer 😉



  • Pilger81 schrieb:

    nei er meint n = anzahl zifern

    256 34 sind 5 zifern

    Ergebnis gleich

    2 * 10^5 + 5*10^4 etc.

    guter Einwand 🙂

    manchmal denkt man halt bissl verquer 😉

    ok, also doch nen kleiner denkfehler meinerseits... 🙄



  • Kuldren schrieb:

    du kannst die zahl die zuerst stehen soll einfach mit der entsprechenden n*10 multiplizieren und dann einfach die zweite zahl addieren....
    warum macht ihr das so kompliziert?

    Erstens meinst Du wahrscheinlich 10^n und
    zweitens liegt das Problem dann in der Berechnung von 'n'.
    Vorschlag:

    #include <iostream>
    #include <sstream>
    #include <cmath>
    
    int pow( int x, int y ) // pow mit int's
    {
        // if (y<0) Fehler
        switch( y )
        {
        case 0:
            return 1;
        case 1:
            return x;
        default:
            return x * pow( x, y-1 );
        }
    }
    
    int main()
    {
        using namespace std;
    
        int werta = 123;
        int wertb = 4;
        int wert_neu;
        wert_neu = pow( 10, int(floor(log10( double(wertb) ))) + 1 ) * werta + wertb;
    
        cout << "wert_neu = " << wert_neu << endl;
        return 0;
    }
    

    .. ist aber auch nicht einfacher als mit std::stringstream 😉

    Gruß
    Werner



  • WTF?

    int append(int a, int b)
    {
        int cpy = b;
        do {
            a *= 10;
            cpy /= 10;
        } while(cpy > 0);
        return a + b;
    }
    

    Sollte stimmen wenn mich net alles täuscht.

    Gruß


Anmelden zum Antworten