Vergleichen von Elementen in einem Feld

Gast #4842959
Lesenswert?
• ▲
▼
Hallo,

ich bin ein Anfänger und befasse mich momentan mit Arrays.
Ich wollte die Elmente eines Arrays vergleichen. Werte die doppelt 
vorkommen, sollen nicht ausgegeben werden, d.h. beim Eingabe von 
2,3,3,4,5
soll 2,3,4,5 ausgegeben werden. Vielleicht kann mir jemand einen Tipp 
geben oder sagen wo der Fehle liegt.



int Feld[5]={2,3,3,4,5};

for (int i=0; i<5; i++)
{
if(Feld[i]!=Feld[i+1] cout<<Feld[i]<<endl;
}

VG
#4842977
Lesenswert?
• ▲
▼
Im blödsten Fall musst du ein Element mit dem Rest des Arrays 
vergleichen und überprüfen, ob es ein 2. Element mit dem gleichen Wert 
gibt. Dafür brauchst du 2 ineinander verschachtelte for-Schleifen. Dabei 
beachten, dass der Index der übergeordneten Schleife in der inneren 
Schleife nicht überprüft wird (ansonsten überprüfst du das Element mit 
sich selber). Beim Durchlaufen der inneren Schleife setzt du eine 
boolean-Variable auf true, wenn ein Element mit gleichem Werte gefunden 
wurde (und brichst am besten gleich ab), diese Variable überprüfst du 
dann. Wenn sie false ist, gibst du den Wert am aktuellen Index aus.
Gast #4843010
Lesenswert?
• ▲
▼
New schrieb:
> Vielleicht kann mir jemand einen Tipp
> geben oder sagen wo der Fehle liegt.

die ersten Fehler (fehlende Klammer) liefert der Compiler

Dann ist nicht klar, ob die Werte immer sortiert sind.
Für den letzten Wert greift die Abfrage auf Speicher nach dem Array zu. 
Den müsstest Du daher aussortieren

1
   if((i==5-1)||(Feld[i]!=Feld[i+1])) cout<<Feld[i]<<endl;
Gast #4843553
Lesenswert?
• ▲
▼
Max M. schrieb:
> Im blödsten Fall musst du ein Element mit dem Rest des Arrays
> vergleichen und überprüfen, ob es ein 2. Element mit dem gleichen Wert
> gibt. Dafür brauchst du 2 ineinander verschachtelte for-Schleifen.

Vielen Dank für die Antworten. Ich habe jetzt nur noch ein Problem, wenn 
ich 2,3,3,4,5 eingebe, dann erhalte ich 2,3,4 zurück. Der letzte Wert 5 
wird nicht ausgegeben. Nun muss ich wohl überlegen wie ich diesen Teil 
"cout<<Array[i]<<endl;" umschreibe.

 for (int i=0; i < 5; i++)
            {
                for (int j=i+1; j < Array.Length; j++)
                {
                    if (Feld[i]!=Array[i+1])
                    {

                        cout<<Array[i]<<endl;

                        break;

                    }
                }
#4843946
Lesenswert?
• ▲
▼
Das war mein Ansatz, wenn das Array sortiert ist kann man vllt. noch was 
optimieren:
1
int arr[] = new int[]{1,2,7,3,1,2,8};
2
for(int i = 0; i < arr.Length; i++)
3
{
4
  bool detectedSameValue = false;
5
  for(int j = 0; j < arr.Length; j++)
6
  {
7
    if (arr[i] == arr[j] && i != j)
8
    {
9
      detectedSameValue = true;
10
      break;
11
    }
12
  }
13

14
  if (!detectedSameValue)
15
    Console.WriteLine(arr[i]);
16
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren