C++ Array und Zeiger

DCTH

Grand Admiral Special
Mitglied seit
16.03.2002
Beiträge
2.057
Renomée
3
Standort
Am Neckar
Also, ich habe hier ein kleines Programm, welches ein Array in ein anderes Array an gewünschter Stelle einfügt.

Dazu wird in einer Funktion ein neues/variables Array definiert.

Dies steht im Main-Programm: Übergeben werden beide Arrays, deren Länge L1 und L2 sowie die Position vpos wo das 2te ins 1te soll.

Code:
fuse(arr1, arr2, L1, L2, vpos);

Nun verlangt die Aufgabe, dass der Return-Wert ein Zeiger auf das neue Array ist. (Also nur dieser, nicht auch die Länge oder sonst etwas. Wobei ich die Länge auch einfach über die beiden Längen L1 und L2 ja habe).

Ich kriege es grade einfach nicht hin, dass ich dann einen Wert/Ausdruck wie auch immer bekomme, mit dem ich dann im Main-Programm eine for-Schleife zur Ausgabe des neuen Arrays schreiben kann.

hier mal noch der komplette Code, wobei ich denke den brauchts eigentlich nicht:

Code:
#include <iostream>
#include <conio.h>

using namespace std;

// arr2 mit der länge L2 soll in arr1 mit der länge L1 an der position vpos
int *fuse(int arr1[], int arr2[], int L1, int L2, int vpos)
{
    int *newarr=NULL;
    newarr = new int[L1+L2]; //neues array wird definiert

    int r=0; //zusätzlicher zähler
    vpos-=1; //weil das arr2 vor der angegebenen stelle eingefügt werden soll
    
    for(int i=0; i<vpos; i++ , r++) //arr1 bis zuer stelle vpos in newarr einfuegen
    {
        newarr[i]=arr1[r];
    }

    cout << "DebugInfo r=" << r << endl;

    r=0;
    for(int i=0; i<L2; i++, r++) //arr2 komplett in newarr ab stelle vpos eintragen
    {
        newarr[vpos+i]=arr2[r];
    }

    cout << "DebugInfo r=" << r << endl;
    
    r=0;
    for(int i=0; i<=(L1-vpos); i++, r++) //arr1 ab stelle vpos in newarr ab stelle vpos+L1 eintragen
    {
        newarr[vpos+L2+r]=arr1[vpos+r];
    }

    cout << "DebugInfo r=" << r << endl;

    r=0;

    if(vpos<0 && vpos>L1)
        return NULL;
    else
        return newarr;

    /*cout << "\nInhalt newarr: " << endl;
    for(int i=0; i<(L1+L2); i++) //debuginfo, ausgabe von newarr
        cout << newarr[i];*/
}

void main()
{
    int arr1[5]={1,2,3,4,5};
    int arr2[3]={6,7,8};
    int L1, L2, vpos, x;

    L1 = sizeof(arr1)/sizeof(int);
    L2 = sizeof(arr2)/sizeof(int);

    cout << "\nInhalt arr1: " << endl;
    for(int i=0; i<L1; i++)
        cout << arr1[i];
    cout << endl;

    cout << "\nInhalt arr2: " << endl; 
    for(int i=0; i<L2; i++)
        cout << arr2[i];
    cout << endl;

    cout << "\nStelle zum Einfuegen von arr2 in arr1 angeben ..." << endl;
    cin >> vpos;

    fuse(arr1, arr2, L1, L2, vpos);

    //cout << x << endl;

    /*cout << "\nInhalt newarr: " << endl;
    for(int i=0; i<(L1+L2); i++) //debuginfo, ausgabe von newarr
        cout << newarr[i];*/    

    _getch();
}

Danke im vorraus!
 
PHP:
   int *newarr;

    newarr = fuse(arr1, arr2, L1, L2, vpos);

    cout << "\nInhalt newarr: " << endl;
    for(i=0; i<(L1+L2); i++) //debuginfo, ausgabe von newarr
        cout << newarr[i];



meinst Du das?

Die Länge Deines neuen Arrays solltest Du nochmal überdenken, die wird i.d.R. zu groß sein ;)
Auch sonst ist mir auf die Schnelle nicht immer klar geworden was Du da alles in Deiner Funktion machen wolltest ;D


PHP:
    r=0;
    for(i=0; i<=(L1-vpos); i++, r++) //arr1 ab stelle vpos in newarr ab stelle vpos+L1 eintragen
    {
        newarr[vpos+L2+r]=arr1[vpos+r];
    }
wofür?

array1 ist drinne, array2 wird ab stelle x angefügt.
Mehr brauchst Du doch nicht ?!?

Wichtg ist übrigens VPos auf Fehleingabe abzufangen ;)
 
Zuletzt bearbeitet:
Ja, genau das ... hatte nicht an "int *newarr;" ... jetzt gehts so wie ich wollte, danke.

array1 ist drinne, array2 wird ab stelle x angefügt.
Mehr brauchst Du doch nicht ?!?

Ich möchte ja EINfügen, nicht nur anfügen.
Also:
Zuerst wird arr1 bis zur Stelle vpos in newarr geschrieben (erste schleife in der Fkt)
Dann wird das 2te Array (arr2) in newarr eingefügt und zwar ab der Stelle, wo die vorige Schleife aufhörte (zweite Schleife)
Zuletzt muss noch der Rest des ersten Arrays (arr1) in newarr kopiert werden. Und zwar eben auf die letzten paar verbleibenden Plätze.

Deswegen wird mein neues Array auch nicht zu groß, sondern genau richtig: arr1 und arr2 sollen beide komplett (komplett != am Stück, zumindest was arr1 betrifft) in ein neues Array kopiert werden.

Das ganze ist lediglich eine Übung bzgl einfügen eines Arrays in ein anderes ... dass des nur über ein new array geht etc.
Fehleingaben sind egal ... richtig wäre es natürlich. Aber genauso würde es hier keinen Sinn machen ein variables Array zu benutzen, da mir deren Größe ja bekannt ist.

Im realistischen (nicht Übungsfall) wäre hier kein Array von vornherein bekannt und man müsste auch Fehleingaben überpfrüfen, in diesem Falle aber völlig egal.
 
aso, es soll "dazwischen" gequetscht werden.... kapiert ;D
 
So trivial wollt ichs nun nicht ausdrücken, aber ja! ;D

Bin inzwischen bei der nächsten Aufgabe, nix wildes ... es soll ein Speicherblock simuliert werden und dazu ein 10x16 großes Array zufällig mit Nullen und Einsen gefüllt werden.

Aber da ist mir mal wieder aufgefallen wie unzufällig die einfache rand-Funktion ist:

Code:
    int sblock[16][10];

    for(int i=0; i<10; i++)
    {
        for (int j=0; j<16; j++)
        {
            sblock[j][i] = rand() % 2 + 0; //die einfachste und unzufälligste Zufalls-Lösung
        }
    }

Gibt natürlich jedesmal die selbe Folge von Nullen und Einsen ... ne Idee wie ich das schnell und ohne großen Aufwand aufpeppen kann? Also weg von dieser extremen Pseudo-Zufälligkeit?


EDIT: Ah habs scho .. rand sollte man mit was veränderlichem initialisieren ...
 
Zuletzt bearbeitet:
Zurück
Oben Unten