c ++数组值匹配变量

时间:2009-07-07 07:50:26

标签: c++

我想看看一个值是否等于数组中的任何值。 像这样

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...

如果没有一个Arrayvalues与我的val匹配,我想做其他的事情,但只有一次......如果它匹配,那么我想回到函数的开头,这会给我一个不同的值VAL ... 我应该在哪里放入这段代码

Thx,这是一个很棒的论坛 / Buxley

6 个答案:

答案 0 :(得分:3)

使用标志来指示条件是否至少满足一次:

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

这将为每个匹配元素调用“做某事”。如果你想为第一个匹配元素调用它,只需在“做某事”后使用break;

答案 1 :(得分:3)

您可以使用查找功能

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

现在你可以做到

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

答案 2 :(得分:3)

对于大多数查找操作,STL都有一个算法。可以使用... 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 ) {
    ...
}

答案 3 :(得分:2)

抱歉干预。我有一些感觉,你会问smth。其他。据我了解,您有一组有序的值,并希望从数组中找到第一个可能的值。

如果是这样,请使用C ++标准库中的find_first_of算法。 STL中的算法可能更适合您的编译器(例如,它们可能支持并行搜索)。

以下是来自CPPReference.com的改编代码。您不仅限于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;

找到的值result指向nums数组中与targets数组元素的第一个可能元素匹配的元素。如果没有匹配result等于nend

最诚挚的问候,
Ovanes

答案 4 :(得分:2)

请查看STL可以为您做些什么。 算法有一整节:

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

答案 5 :(得分:1)

不完全确定你追求的是什么。如果您找到匹配项,然后从函数返回,您可以随时执行您的工作。

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 ..

或者,你可以设置一个布尔值并打破循环,有很多方法。选一个:)