Vergleichen von Elementen in einem Feld

Gast #4842959
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
Gast #4842961
Der offensichtliche Fehler ist die Formatierung.
Davon abgesehen kann das so sicher nicht kompiliert werden, wenn es C 
oder C++ ist.
Auf welchem Controller soll das denn laufen?
#4842977
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.