2009-07-07 13 views
0

Je voudrais voir si une valeur est égale à l'une des valeurs d'un tableau. comme celui-ciVariable de valeur de tableau C++ 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... 

Si aucun des ArrayValues ​​correspond à mon val Je voudrais faire quelque chose d'autre, mais une seule fois ... Et si elle correspond alors je voudrais revenir au début de la fonction me donner une valeur différente de val ... Où dois-je mettre dans ce code

Thx, pour un grand forum /Buxley

Répondre

3

Utilisez un drapeau pour indiquer si la condition était remplie au moins une fois:

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

Cela appellera le "faire quelque chose" pour chaque élément correspondant. Si vous voulez l'appeler pour le premier élément correspondant, utilisez seulement break; après "faire quelque chose".

+0

merci beaucoup c'est fondamentalement ce que je cherchais ... Je pensais juste pouvoir le faire sans utiliser de var ... –

+0

Si vous avez besoin d'invoquer l'action pour chaque élément correspondant, vous aurez besoin de la var supplémentaire pour persister le fait qu'une correspondance a eu lieu pendant que vous continuez la boucle. – sharptooth

+0

Merci j'ai utilisé cet extrait sauf que j'ai utilisé une variable normale au lieu du bool ... et je lui ai juste donné une valeur s'il y avait un match ... Je l'ai eu pour travailler maintenant et essayer de résoudre le reste de mes 100 milliards problèmes avec C++ (= –

1

Pas tout à fait sûr de ce que vous recherchez. Vous pouvez toujours faire vos trucs si vous trouvez une correspondance et revenez juste de la fonction. Ou, vous pouvez définir une valeur booléenne et casser la boucle à la place, il y a plusieurs façons. Choisissez un :)

3

vous pouvez utiliser une fonction de recherche

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

Maintenant, vous pouvez faire

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

ou, comme c'est une question C++, utilisez + la fonction + find –

2

Désolé d'intervenir. J'ai le sentiment que vous alliez demander ça. autre. Comme je vous comprends, vous avez un ensemble ordonné de valeurs et vous aimeriez trouver la première valeur possible de cet ensemble dans un tableau. Si tel est le cas, utilisez l'algorithme find_first_of de la bibliothèque standard C++. Les algorithmes en STL peuvent être mieux optimisés pour votre compilateur (par exemple, ils peuvent prendre en charge la recherche parallèle).

Voici un code adapté provenant de CPPReference.com. Vous n'êtes pas limité aux valeurs int.

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; 

Après la valeur trouvée result des points à l'élément du tableau nums qui correspond premier élément possible des éléments de réseau targets. Si aucun correspond à result est égal à nend.

Cordialement,
Ovanes

+0

Cela semble très intéressant. Et dans mon code J'ai en fait plusieurs cibles, donc je vais l'essayer demain ... En ce moment, il est temps de rentrer à la maison et se détendre ... À la vôtre –

3

Pour la plupart des actions de consultation, le TSL a un algorithme. Trouver une valeur dans un tableau peut être fait en utilisant ... std :: find.

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

Veuillez regarder ce que le STL peut faire pour vous.
Il y a une section sur les algorithmes:

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