2010-12-13 4 views
-3

Wie kann ich Zahlen in ein Array eingeben, so dass doppelte Einträge ignoriert werden?Arrays und Index

Zum Beispiel, wenn ich 6 setzen und dann 3 in das Array, versuchte dann 6 in das Array eingefügt werden soll 6 verursachen zurückgewiesen werden (da es bereits im Array).

#include <iostream> 

using namespace std; 
int main() 
{ 
    int x,y; 
    int number; 
    int arr[5]; 

    for (x=0; x<5;) 
    { 
    cout<<"enter a number:"<<endl; 
    cin>>number; 
    bool replace = True; 
    for (y=0; y<x; y++) 
    { 
     if (number != arr[y]) 
     { 
     cout << "try next time" << endl; 
     replace = False; 
     break; 
     } 
    } 

    if (replace) 
    { 
     arr[x] = number; 
     x++; 
    } 
    } 
    return 0; 
} 
+2

@jboy - wenn dies Hausaufgaben sind, fügen Sie bitte das entsprechende Tag hinzu, indem Sie Ihre Frage bearbeiten. Die Gemeinschaft wird auch viel empfänglicher sein, wenn Sie Code schreiben, der zeigt, was Sie bisher versucht haben. –

+1

ok ill zeige meinen Code help me pls .. – jboy

+0

Ich formatierte den Code und notierte 2 Dinge - 1. Sie haben nicht ausgeschnitten/einfügen, weil die Einrückung ungültig ist. 2. Es gibt irrelevante 'Flag'-Zeilen, die zu Nichtkompilierungen führen. Fix diese zwei Elemente und dann können wir helfen, es herauszufinden. – KevinDTimm

Antwort

4

std::set<int> würde tun, was Sie wollen. Dies ist jedoch nicht indexierbar.

Sie könnten Boost.MultiIndex verwenden, um Ihnen einen Direktzugriff zu geben und die Eindeutigkeit auf der gleichen zugrunde liegenden Werteliste zu erzwingen.

BTW - Fragen direkt für Code ist nicht empfohlen, Praxis.

+0

was ich meine ist, wenn Sie die gleiche Zahl erneut eingeben, wird es becoz die Zahl bestreiten, die Sie bereits im Index eingegeben haben, das ist mein Code: – jboy

+4

@jboy - Das Wort, das Sie suchen, ist 'weil' – KevinDTimm

+0

im nur a Student und ich möchte herausfinden, was falsch in meinen Codes, so kann ich es beheben, nur dieses Mal pls ... – jboy

2

Was Sie wirklich wollen, ist ein set. Sets können keine doppelten Elemente enthalten.

Here ist eine Referenz auf die Menge in C++.

Verwenden Sie das Set nur als Container für Ihre Nummern. Wenn Sie versuchen, ein Duplikat hinzuzufügen, wird es automatisch zurückgewiesen.

+0

können Sie mir die Codes? C++ für Codeblocks geben? – jboy

+0

@jboy, nein. Es tut uns leid. Verwenden Sie das Set einfach als Container für Ihre Nummern. Wenn Sie versuchen, ein Duplikat hinzuzufügen, wird es automatisch zurückgewiesen. – jjnguy

+2

@jboy: Der Code für diese Zuweisung * sollte nicht IDE-abhängig sein. Wenn es so ist, machst du es wahrscheinlich falsch. – FrustratedWithFormsDesigner

1

Sie möchten kein Array, sondern eine Datenstruktur namens Hashtable;

Alternativ können Sie eine Datenstruktur suchen, die als assoziatives Array bezeichnet wird.

1

Sie sollten keine Arrays dafür verwenden. Sie sollten zum Beispiel std :: set verwenden. Oder, wenn Sie ein Array als Ihre Datenstruktur benötigen, könnten Sie das Array (z. B. realisiert durch std :: vector) in einer Klasse einkapseln und spezifische Funktionen definieren, um auf die Array-Elemente zuzugreifen. Darüber hinaus können Sie ein Std :: Set enthalten, um eine schnelle Überprüfung für vorhandene Elemente bereitzustellen.

+1

Es sind Hausaufgaben - ihn auf std: set hinzuweisen ist kontraproduktiv, weil er tut, was der Auftrag ihm sagt. hoffentlich std: set kommt nächste woche ins spiel :) – KevinDTimm

+1

@KevinDTimm: Ich weiß nicht, es ist schon Dezember. Ich hätte gedacht, dass die meisten Schulen jetzt im Prüfungsmodus sind. 'std: set' könnte nicht vor der nächsten Amtszeit im Januar erscheinen. – FrustratedWithFormsDesigner

+0

Sie haben Recht, sie sind. Aber für die meisten College-Studenten ist Januar nächste Woche (auch wenn das nächste Semester einen Monat entfernt ist) – KevinDTimm

1

Sollte sein:

int arr[5] = {0,0,0,0,0}; 

Entfernen Sie die x ++ aus der folgenden Zeile:

for (x=0;x<5;x++) 

Dann:

bool replace=true; 
for (y=0;y<x;y++) 
{ 
    if (number == arr[y]) 
    { 
     replace=false; 
     break; 
    } 
} 

if (replace) 
{ 
     arr[x]=number; 
     x++; 
} 

Schließlich entfernen:

else if(number == arr[x]) 
{ 
    arr[x]=number; 

cout << "try next time"<<endl; 
} 

können Sie fügen:

cout << "try next time"<<endl; 

vor dem

replace=false; 
+0

es läuft aber ohne xtt in für (x = 0 sein Fehler – jboy

+0

Sorry, das hilft nicht (vor allem, weil der Code in Ihrem Beitrag ist nicht was Sie verwenden - es würde nie kompilieren) – KevinDTimm

+0

ich versuchen es, aber es war Fehler, lösche ich auch die flgs – jboy

4

Sie haben zu viele x++ ‚s und Sie voreingestellt nicht arr (vielleicht mehr Stil als Fehler)

wie zu tun weißt du, dass es nicht funktioniert? (setzen einige Debug-Code innerhalb von if (number == arr[y]) und if (replace)

+2

+1 für Sisyphean Aufwand –

+0

@Steve - Thanks: {) - hoffentlich einige Requisiten für die eigentliche Veröffentlichung der richtigen Lösung auch (zweimal) – KevinDTimm

0

die x Nehmen Sie ++ in der for-Schleife, diese Weise können Sie nur diese Zählung erhöht wird, wenn Sie eine neue Nummer eingeben.

Auch, wenn Sie nur die Schleife fünfmal ausführen wollen, Ihre äußere for-Schleife nur sein sollte x < 5.

Alles in allem Ihre äußere Schleife sollte lauten:

for (x=0;x<5;) 
+0

Er bekommt nur die Hälfte der Änderungen Er soll von der OP kommen (das sind die 2, die verpasst wurden, auf die ich in meinem Kommentar oben und eine davon in meiner Antwort unten verwiesen habe - ich hatte gehofft, er würde die Fehler in seiner 'Code-Rezension' notieren) – KevinDTimm

-1

Es Es sieht so aus, als ob Sie eine Zahlenfolge einlesen möchten, die keine Duplikate enthält. Es scheint auch, dass die maximale Anzahl eindeutiger Nummern ist.

int n = 0; /* The number of unique numbers read in so far */ 
for {;;} 
    cout << "enter nmber" << endl; 
    cin >> number; 
    for (x=0; x < n; ++x) { 
    if (number == arr[x]) goto L1; /* I love messing with peoples head by using this goto */ 
    } 
    arr[n] = number; 
    ++n; 
    if (n == 5) break; 
L1: 
    continue; 
} 
+0

Bitte formatieren du Code. – BlackBear

+1

Bitte lesen Sie die FAQ - http://stackoverflow.com/faq –

0

Werfen Sie einen genaueren Blick darauf, wo Sie x inkrementieren.