2009-07-07 6 views
0

Ich würde gerne sehen, ob ein Wert gleich einem der Werte in einem Array ist. wie diesC++ Array Wert übereinstimmende Variable

Beginning of function(here I give Val differnt values with for loops...) 

     for (i=0;i<array_size;i++) 
      if (Val==array[i]) 
      do something 

    else 
    do something else if non of the above values matched val... 

Wenn keiner der Arrayvalues ​​meiner val paßt würde Ich mag etwas anderes tun, aber nur einmal ... Und wenn sie paßt, dann würde Ich mag an den Anfang der Funktion zurück zu gehen, dass in diesem Code gibt mir einen anderen Wert val ... Wo soll ich

Thx, für ein großes Forum /Buxley

Antwort

3

Verwenden Sie einen Flag, um anzuzeigen, ob die Bedingung erfüllt war mindestens einmal ausdrückte:

bool hasMatch = false; 
for (i=0;i< array_size;i++) { 
     if (Val==array[i]) { 
      //  do something 
      hasMatch = true; 
     } 
} 
if(!hasMatch) { 
    // do whatever else 
} 

Dadurch wird für jedes passende Element "etwas tun" aufgerufen. Wenn Sie es für das erste übereinstimmende Element aufrufen möchten, verwenden Sie nur break; nach "etwas tun".

+0

vielen Dank dies im Grunde ist das, was ich gesucht habe ... Ich dachte nur, ich könnte es tun, ohne eine extra var ... –

+0

Wenn Sie die Aktion für jedes passende Element aufrufen müssen, benötigen Sie die extra var, um die Tatsache zu erhalten, dass eine Übereinstimmung aufgetreten ist, während Sie die Schleife fortsetzen. – sharptooth

+0

Danke Ich habe dieses Snippet verwendet, außer dass ich eine normale Variable anstelle des Bool verwendet habe ... und habe einfach einen Wert angegeben, wenn es ein Match gab ... Ich habe es jetzt zum Laufen gebracht und versuche den Rest meiner 100 Milliarden zu lösen Probleme mit C++ (= –

1

Nicht ganz sicher, was Sie suchen. Sie können immer Ihre Sachen machen, wenn Sie eine Übereinstimmung finden und dann einfach von der Funktion zurückkehren.

for (int i=0; i < array_size; i++) { 
    if (Val==array[i]) { 
     // do something 
     return; 
    } 
} 

// if we end up here, there was no match 
// do something else .. 

Oder Sie könnten einen booleschen Wert festlegen und die Schleife stattdessen brechen, gibt es viele Möglichkeiten. Wählen Sie eine :)

3

Sie eine Suchfunktion

int find(int value, int* array, int size) { 
    int i; 
    for (i=0; i<size; i++) { 
     if (array[i]==value) { 
      return i; 
     } 
    } 
    return -1; 
} 

Jetzt können Sie

if (find(value, array, array_size)>=0)) { 
    do_something_when_found(); 
} else { 
    do_something_when_not_found(); 
} 
+1

oder, da es eine C++ Frage ist, benutze + die Funktion + find –

2

Leider eingreifen tun. Ich habe das Gefühl, dass du etwas fragen würdest. sonst. Wie ich Sie verstehe, haben Sie eine geordnete Menge von Werten und möchten den ersten möglichen Wert aus dieser Menge in einem Array finden.

Wenn ja, verwenden Sie den find_first_of Algorithmus aus der C++ - Standardbibliothek. Algorithmen in STL könnten besser für Ihren Compiler optimiert sein (z. B. könnten sie die parallele Suche unterstützen).

Hier ist ein angepasster Code aus CPPRreference.com. Sie sind nicht auf int-Werte beschränkt.

int nums[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; 
int* nend = &nums[10]; 

int targets[] = { 9, 4, 7 }; 
int* tend=&targets[3]; 

using namespace std; 
int* result = find_first_of(&nums[0], nend, &targets[0], tend); 

if(result == nend) 
    cout << "Did not find any of { 9, 4, 7 }" << endl; 
else 
    cout << "Found a matching target: " << *result << endl; 

Nachdem der Wert gefunden result zeigt auf das Element in der Anordnung, das nums erstes mögliches Element der targets Feldelemente entspricht. Wenn keine übereinstimmte result entspricht nend.

Mit besten Grüßen,
Ovanes

+0

Das sieht ziemlich interessant aus Ich habe tatsächlich mehrere Ziele, also werde ich es morgen ausprobieren ... Jetzt ist es Zeit nach Hause zu gehen und zu entspannen ... Prost –

3

Für die meisten Lookup-Aktionen hat der STL einen Algorithmus. Das Finden eines Wertes in einem Array kann mit ... std :: find erfolgen.

const char values[] = "abcdefg"; 
const char* values_end = values + _countof(values); 

const bool dPresent = 
std::find_if(values, values_end , 'd') != values_end ; 

if(dPresent) { 
    ... 
} 
2

Bitte schauen Sie, was die STL für Sie tun kann.
Es gibt einen ganzen Abschnitt auf Algorithmen:

if (std::find(array,array+array_size,Val) != array+array_size) 
{ 
    // Found it. 
} 
else 
{ 
    // Did not find it. 
}