Code in C, der gleiche Zahlen auflistet?
Das ist mein aktueller Code:
#include <stdio.h>
#include <stdlib.h>
size_t copy_duplicates(int dst[], const int src[], size_t len)
{
size_t num_duplicates = 0; // Zählvariable für Duplikate
for (size_t i = 0; i < len - 1; i++) {
size_t count = 1; // Anzahl der Vorkommen des aktuellen Elements
for (size_t j = i + 1; j < len; j++) {
if (src[i] == src[j]) {
count++; // Zähle die Anzahl der Vorkommen
}
}
// Kopiere das aktuelle Element entsprechend seiner Anzahl der Vorkommen
for (size_t k = 0; k < count - 1; k++) {
dst[num_duplicates++] = src[i];
}
}
return num_duplicates; // Gib die Anzahl der Duplikate zurück
}
int main()
{
const int src[] = { 5, 2, 5, 7, -7, 3 };
int dst[50];
size_t num_duplicates = copy_duplicates(dst, src, sizeof(src) / sizeof(src[0]));
printf("%zu\t", num_duplicates);
printf("{");
for (size_t i = 0; i < num_duplicates; i++) {
printf("%d%s", dst[i], (i < num_duplicates - 1) ? "," : "");
}
printf("}\n");
return EXIT_SUCCESS;
}
Er gibt mir aber erst wenn ich mehr als zwei gleiche Zahlen eingebe, die richtige Ausgabe aus.
Ich möchte, dass ich beispielsweise bei
const int src[] = { 5, 2, 5, 7, -7, 3 };
in der Ausgabe 2 für die Anzahl gleicher Zahlen und dann { 5, 5 } für die Zahlen die mehrmals vorkommen. Bis jetzt kommt bei mir immer nur { 5 } in der Ausgabe heraus.
1 Antwort
Fünf hat einen `count` von 2, in der Schleife
for (size_t k = 0; k < count - 1; k++) {
dst[num_duplicates++] = src[i];
}
kopierst Du die Zahl aber jeweils nur `count - 1`, also im Falle der Fünf nur ein mal, statt `count` mal, also 2 mal in unserem Falle.
Sollte es das nicht gewesen sein, solltest Du nochmal spezifizieren, was genau deine Funktion überhaupt machen soll.
Woher ich das weiß:Studium / Ausbildung – B.Sc. Computer Science
Vielen Dank für deine mühe erst mal. Ich dachte auch, dass irgend wo beim counten liegt, aber wenn ich dich richtig verstanden habe meinst du ich soll von count nichts subtrahieren oder? Dann kommt bei mir aber bei der Ausgabe 6 {5,5,2,5,7,-7} raus. Die Aufgabe besteht darin, eine Funktion zu implementieren, die Werte aus einem Quell array in ein Ziel array kopiert. Dabei sollen nur Werte kopiert werden, die im Quell array mehr als einmal vorkommen. Das Ziel array hat die gleiche Länge wie das Quell array. Die Funktion gibt die Anzahl der kopierten relevanten Elemente zurück.