Find c что это

от admin

C# List Find

In this article we show how to find elements in C# with Find, FindLast, FindAll, FindIndex, and FindLastIndex methods.

C# list is a collection of elements of the same type. The elements can be accessed by index.

Advertisements C# List Find

The Find method returns the first element that matches the given predicate.

A predicate is a single argument function that returns a boolean value.

Find takes a Predicate delegate as a parameter.

In the example, we first word that starts with ‘w’ and the first element that is greater than zero.

The predicate is a lambda expression.

C# List FindLast

The FindLast method returns the last element that matches the given predicate.

This is the function’s syntax.

In the program, we find the last word that starts with ‘w’ and the last integer that is greater than zero.

Advertisements C# List FindAll

The FindAll method retrieves all the elements that match the conditions defined by the specified predicate.

The program finds all words that start with ‘w’ and all integers that are greater than zero.

C# List FindIndex

The FindIndex method returns the index of the first element that matches the given predicate. It returns -1 if there was not match found.

The overloaded methods take the start index and the count (number of elements to search) as parameters.

We have a list of words. We find the index of the first word that starts with ‘w’ from the beginning and then after index 5.

Advertisements C# List FindLastIndex

The FindLastIndex method returns the index of the last element that matches the given predicate. It returns -1 if there was not match found.

This is the syntax of the methods.

In the program we find the index of the last word that starts with ‘w’ from the end and then after index 5.

Find c что это

This method is used to search for an element that matches the conditions defined by the specified predicate and returns the first occurrence within the entire Array.

Syntax:

Here, T is the type of element of the array.

Parameters:

array: It is the one-dimensional, zero-based array to search.

match: It is the predicate that defines the conditions of the element to search for.

Return Value: This method return the first element that matches the conditions defined by the specified predicate if it is found. Otherwise, it returns the default value for type T.

Exception: This method throws ArgumentNullException if the array is null or match is null.

Find c что это

Функция find() возвращает индекс первого вхождения подстроки или отдельного символа в строке в виде значние я типа size_t :

Если строка или символ не найдены (как в примере выше в последнем случае), то возвращается специальная константа std::string::npos , которая представляет очень большое число (как видно из примера, число 18446744073709551615). И при поиске мы можем проверять результат функции find() на равенство этой константе:

Функция find имеет ряд дополнительных версий. Так, с помощью второго параметра мы можем указать индекс, с которого надо вести поиск:

Используя эту версию, мы можем написать программу для поиска количества вхождений строки в тексте, то есть выяснить, сколько раз строка встречается в тексте:

Здесь в цикле пробегаемся по тексту, в котором надо найти строку, пока счетчик i не будет равен text.length() — word.length() . С помощью функции find() получаем индекс первого вхождения слова в тексте, начиная с индекса i. Если таких вхождений не найдено, то выходим из цикла. Если же найден индекс, то счетчик i получает индекс, следующий за индексом найденного вхождения.

В итоге, поскольку искомое слово «friend» встречается в тексте два раза, то программа выведет

В качестве альтернативы мы могли бы использовать цикл while :

Еще одна версия позволяет искать в тексте не всю строку, а только ее часть. Для этого в качестве третьего параметра передается количество символов из искомой строки, которые программа будет искать в тексте:

Читать:
Чем качать торренты на мак

Стоит отметить, что в этом случае искомая строка должна представлять строковый литерал или строку в С-стиле (например, символьный массив с концевым нулевым байтом).

Функция rfind. Поиск в обратном порядке

Функция rfind() работает аналогично функции find() , принимает те же самые параметры, только ищет подстроку в обратном порядке — с конца строки:

Поиск любого из набора символов

Пара функций — find_first_of() и find_last_of() позволяют найти соответственно первый и последний индекс любого из набора символов:

В данном случае ищем в строке «Phone number: +23415678901» первую и последнюю позицию любого из символов из строки «0123456789». То есть таким образом мы найдем начальный и конечный индекс номера телефона.

Если нам, наоборот, надо найти позиции символов, которые НЕ представляют любой символ из набора, то мы можем использовать функции find_first_not_of() (первая позиция) и find_last_not_of() (последняя позиция):

Мы можем комбинировать функции. Например, найдем количество слов в строке:

Вкратце рассмотрим данный код. В качестве текста, где будем подсчитывать слова, определям переменную text. И также определяем строку разделителей, такие как знаки пунктуации, пробелы, символ перевода строки, которые не являются словами:

Перед обработкой введенного текста фиксируем индекс первого символа первого слова в тексте. Для этого применяется функция find_first_not_of() , которая возвращает первый индекс любого символа, который не входит в строку separators:

Далее в цикле while смотрим, является ли полученный индекс действительным индексом:

Например, если в строке одни только символы из набора separators, тогда функция find_first_not_of() возвратит значение std::string::npos , что будет означать, что в тексте больше нет непунктационных знаков.

И если start указывает на действительный индекс начала слова, то увеличиваем счетчик слово. Далее находим индекс первого символа из separators, который идет сразу после слова. То есть фактически это индекс после последнего символа слова, который помещаем в переменную end:

Для нахождения позиции окончания слова используем функцию find_first_of() , которая возвращает первую позицию любого символа из separators, начиная с индекса start+1

Причем может быть, что функция find_first_of() не найдет ни одного символа из separators (например, слово является поседним в тексте, и после него нет никаких знаков пунктуации или пробелов), в этом случае конечный индекс равен длине текста.

После того, как мы нашли начальный индексы слова и его конец, переустанавливаем start на начальный индекс следующего слова и повторяем действия цикла:

std::find, std::find_if, std::find_if_not

Возвращает итератор к первому элементу в диапазоне [first, last) , который удовлетворяет определенным критериям:

Parameters

first, last спектр элементов для изучения
value значение для сравнения элементов с
policy политика выполнения для использования. См. Политику выполнения для деталей.
p унарный предикат , который возвращает true для требуемого элемента.

Выражение p(v) должно быть преобразовано в bool для каждого аргумента v типа (возможно, const) VT , где VT — тип значения InputIt , независимо от категории значения , и не должно изменять v . Таким образом, тип параметра VT& не допускается, как и VT , если только для VT перемещение не эквивалентно копии (начиная с C ++ 11).

Выражение q(v) должно быть преобразовано в bool для каждого аргумента v типа (возможно, const) VT , где VT — это тип значения InputIt , независимо от категории значения , и не должно изменять v . Таким образом, тип параметра VT& не допускается, как и VT , если только для VT перемещение не эквивалентно копии (начиная с C ++ 11).

Return value

Итератор первого элемента, удовлетворяющего условию, или last если такой элемент не найден.

Complexity

Не более N применений предиката, где N = std::distance(first, last) .

Exceptions

Перегрузки с параметром шаблона с именем ExecutionPolicy сообщают об ошибках следующим образом:

  • Если выполнение функции, вызванной как часть алгоритма, вызывает исключение, и ExecutionPolicy является одной из стандартных политик , вызывается std::terminate . Для любого другого ExecutionPolicy поведение определяется реализацией.
  • Если алгоритму не удается выделить память, std::bad_alloc .

Possible implementation

Notes

Если у вас нет C ++ 11, эквивалент std::find_if_not является использование std::find_if с отрицательным предикатом.

Похожие статьи