Array mithilfe einer Funktion kopieren
-
Hi
Ich versuche schon den ganzen Tag über irgendwie ein integer Array mit Hilfe einer Funktion zu verändern und in ein neues Array zu kopieren, was mir jedoch noch nicht gelang.
Da ich aus der PHP-Ecke stamme dachte ich, sowas hätte ich innerhalb von wenigen Sekunden zusammen.
<?php funtion wurschtisize_array($array) { // diverse manipulationen return $array; } $foobar = array("Hans","Wurst"); $newbar = wurschtisize_array($foobar); echo $newbar[0]; // z.B. Curry echo $newbar[1]; // z.B. Poulet ?>In cpp scheint das aber irgendwie nicht so einfach. leider......zum glück? ...bisher nur leider

Konkret geht es darum Jasskarten zu mischen. Ich habe ein in array mit 52 Elementen.
int KartenStappel[52] for (int i = 0; i < 52; i++) { KartenStappel = i; }und die Funktion, die die Karten (das Array) mischen soll und als neues Array rauspacken. Die Funktion, wie sie jetzt ist, ist zwar performancemässig gegen Ende der for-Schlaufe nicht optimal (er versucht solange die letzten, noch nicht gebrauchten Zahlen zu finden, bis das Array gefüllt ist), aber da es nur ein Kartenspiel werden soll und diese Funktion auch nur einmal pro ~3 Minuten aufgerufen wird, auch nicht dramatisch.
void CDialogEinsDlg::RandomizeArray(int *pointer) { //Eine Zufallszahl zwischen a und b (incl. a und b) erzeugt man z.B. mit: //a + ( rand() % ( b - a + 1 ) ) srand( (unsigned) time(NULL) ) ; // zufallsgenerator initialisieren int zahl; // zufallszahl int a = 0; // niedrigste zufallszahl int b = 51; // höchste zufallszahl int new_array[52]; // array mit den zufällig gemischten zahlen von 0-51 bool fFound; // prüf-bit, ob die zahl schon in new_array existiert for (int i = 0; i < 52; i++) { fFound = FALSE; // zurücksetzen des pfüf-bits, für diesen Durchlauf zahl = a + ( rand() % ( b - a + 1 ) ); // zufallszahl generieren for (int p = 0; p < 52; p++) { if ( new_array[p] == (*pointer)[zahl]) // existiert die zufallszahl schon? { fFound = TRUE; // wenn ja, abbrechen break; } } if (fFound == FALSE) // wenn nein { new_array[i] = (*pointer)[zahl]; // zahl hinzufügen } else { i=i-1; // wenn die zahl schon existiert, den selben Durchlauf nochmals } } //*KartenStappel = *new_array; *pointer = new_array; return 0; //return new_array; }so, wie sie jetzt da steht, produziert sie die Fehler
error C2109: subscript requires array or pointer type
auf der Linie [i]if ( new_array[p] == (pointer)[zahl])wie ihr seht, habe ich da ein wenig mit pointern versucht, was zu reissen, da ich glaube, dass ich da nicht sehr Falsch liege, komme aber alleine nicht mehr weiter.
Was mache ich Falsch? Mit welchem Denkansatz soll ich weiterfahren? Habt ihr evtl. bereits ein Lösung auf Lager?
Grüsse, Megge
-
_Zim schrieb:
int KartenStappel[52] for (int i = 0; i < 52; i++) { KartenStappel[i] = i; }und die Funktion, die die Karten (das Array) mischen soll und als neues Array rauspacken. Die Funktion, wie sie jetzt ist, ist zwar performancemässig gegen Ende der for-Schlaufe nicht optimal (er versucht solange die letzten, noch nicht gebrauchten Zahlen zu finden, bis das Array gefüllt ist), aber da es nur ein Kartenspiel werden soll und diese Funktion auch nur einmal pro ~3 Minuten aufgerufen wird, auch nicht dramatisch.
void CDialogEinsDlg::RandomizeArray(int *pointer) { //Eine Zufallszahl zwischen a und b (incl. a und b) erzeugt man z.B. mit: //a + ( rand() % ( b - a + 1 ) ) srand( (unsigned) time(NULL) ) ; // zufallsgenerator initialisieren int zahl; // zufallszahl int a = 0; // niedrigste zufallszahl int b = 51; // höchste zufallszahl int new_array[52]; // array mit den zufällig gemischten zahlen von 0-51 bool fFound; // prüf-bit, ob die zahl schon in new_array existiert for (int i = 0; i < 52; i++) { fFound = FALSE; // zurücksetzen des pfüf-bits, für diesen Durchlauf zahl = a + ( rand() % ( b - a + 1 ) ); // zufallszahl generieren for (int p = 0; p < 52; p++) { if ( new_array[p] == (*pointer)[zahl]) // existiert die zufallszahl schon?In C und C++ ist der Ausdruck
int* p; *(p + index);identisch zu
p[index];korrekt ist also
if ( new_array[p] == pointer[zahl]) // existiert die zufallszahl schon?_Zim schrieb:
{ fFound = TRUE; // wenn ja, abbrechen break; } } if (fFound == FALSE) // wenn nein { new_array[i] = (*pointer)[zahl]; // zahl hinzufügenwie oben
_Zim schrieb:
} else { i=i-1; // wenn die zahl schon existiert, den selben Durchlauf nochmals } } //*KartenStappel = *new_array; *pointer = new_array;Das kannst kein C-Array per Zuweisung kopieren. Entweder eine eigene Schleife schreiben oder 'copy' aus der STL nutze
std::copy( new_array, new_array + 52, pointer ); // benötigt #include <algorithm>_Zim schrieb:
return 0;Das return ist zu viel, die Methode liefert void; also einfach weglassen
Du kannst Dir in C++ auch die ganze Methode sparen wenn Du einfach schreibst:
int KartenStappel[52]; for (int i = 0; i < 52; i++) { KartenStappel[i] = i; } std::random_shuffle( arr, arr + 52 ); // benötigt #include <algorithm> // hier sind die Karten gemischtNoch mal 'ne allgemeine Bemerkung. Wenn Du von PHP kommst, so solltest Du Dich mit std::sring und std::vector un den anderen Dingen aus der STL beschäftigen, dann ist vieles genauso einfach wie in PHP.
Gruß
Werner