2013-12-21 5 views
-2

Есть ли код, который проверяет, существует ли определенная строка внутри массива? Например, у меня есть строка «Джон», тогда мне нужно проверить, находится ли «Джон» уже в именах массивов [10].Проверка наличия элемента в массиве

+3

Кажется, вы просто спрашиваете: «Как мне это сделать?» Это не очень хороший способ задать вопрос, потому что это означает, что вы, по крайней мере, не проверяли документацию, прежде чем спрашивать людей. –

ответ

4

std::find делает именно это:

auto i = std::find(std::begin(a), std::end(a), "John"); 

if (i != std::end(a)) … // item found! 

Однако нужно учитывать, что это делает линейный проход над элементами. Это не проблема для 10 предметов, но она становится неэффективной быстро с большим количеством. Для очень больших наборов используйте std::unordered_set вместо массива, чтобы достичь (теоретически) постоянного времени выполнения. В качестве альтернативы, если вы знаете, что массив отсортирован, вы можете использовать std::binary_search для достижения логарифмического времени выполнения.

Вот тот же код, завернутый в функции удобства:

template <typename It, typename T> 
bool contains(It begin, It end, T const& value) { 
    return std::find(begin, end, value) != end; 
} 

А вот перегрузки удобства для массивов C:

template <typename T, typename U, std::size_t N> 
bool contains(T (&arr)[N], U const& value) { 
    return std::find(arr, arr + N, value) != arr + N; 
} 

(Синтаксис для передачи массивов в функции немного странно .)

+0

does std :: найти нужный заголовок? # ..? – user3125901

+0

неважно, я нашел его, хотя спасибо за помощь! – user3125901

+0

О, я буду использовать его как выражение для Это будет выглядеть так: if (Слово «Джон» находится в имени массива []) Что-то вроде этого? – user3125901

-2

Если вы хотите идти архаичным:

function in_array(String my_array[], String findthis){ 
    len=sizeof my_array; 
    for(int i=0;i<len;i++){ 
     if(my_array[i]==findthis){ 
      return true; 
     } 
    } 
    return false; 
} 

затем

in_array(array_of_strings, "john"); 

Я написал это наспех, и я очень устал, но, надеюсь, он может быть полезен.

+1

Вы не можете передавать массивы по значению в C++. Ваш код передает указатель. 'sizeof my_array', следовательно, делает неправильную вещь. –

+0

этот комментарий помогите мне, хотя .. xD это дает мне идею, что мне нужно, спасибо: D – user3125901

+1

Это странный диалект C++, который вы пишете ... – leemes

Смежные вопросы