Как написать программу для поиска

Закрыт. Этот вопрос необходимо уточнить или дополнить подробностями. Ответы на него в данный момент не принимаются.

Хотите улучшить этот вопрос? Добавьте больше подробностей и уточните проблему, отредактировав это сообщение.

Закрыт 7 лет назад .

#include «stdafx.h» #include #include #include #include #include int main() < char mass [80][80]; char slovo[80]; int i=0; int a,k=0; setlocale(LC_ALL, «Russian»); FILE *f; f=fopen(«text.txt», «r»); if(f==NULL) printf(«файл text.txt не открытn»); a=i; printf(«Введите слово для поиска: «); // Здесь должен быть линейный поиск >
Отслеживать
задан 17 дек 2014 в 16:34
53 1 1 золотой знак 2 2 серебряных знака 9 9 бронзовых знаков

кому не ясна суть вопроса, посмотрите на ответы, если ответы не ясны, оставьте комментарий под соответствующим ответом

13 дек 2017 в 17:09

3 ответа 3

Сортировка: Сброс на вариант по умолчанию

Вот ответ, разбирайтесь:

#include «iostream» #include #include using namespace std; int main() < ifstream file(«C://1.txt»); // открыли файл с текстом string s, find; char c; while (!file.eof())< // прочитали его и заполнили им строку file.get(c); s.push_back(c); >file.close(); // обязательно закрыли cout > find; int pos = s.find(find); // поиск if (pos == -1) cout
Отслеживать
ответ дан 18 дек 2014 в 12:14
9,951 14 14 золотых знаков 51 51 серебряный знак 114 114 бронзовых знаков
Большое спасибо, теперь разобрался.
19 дек 2014 в 12:25

Как написать свою программу на python? #python #программирование

Как написать программу для поиска

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

#include #include int main() < std::string text ; std::cout

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

if (text.find(«banana») == std::string::npos)

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

Читайте также:
Что входит в обслуживание программы 1с

#include #include int main() < std::string text ; // поиск с 10-го индекса std::cout

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

#include #include int main() < std::string text ; std::string word ; unsigned count<>; // количество вхождений for (unsigned i <>; i std::cout

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

Парсинг в Python за 10 минут!

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

The word is found 2 times.

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

#include #include int main() < std::string text ; std::string word ; unsigned count<>; // количество вхождений size_t index<>; // начальный индекс while ((index = text.find(word, index)) != std::string::npos) < ++count; index += word.length(); // перемещаем индекс на позицию после завершения слова в тексте >std::cout

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

#include #include int main() < std::string text ; std::string word ; // поиск с 10-го индекса 3 первых символов слова «endless», то есть «end» std::cout

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

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

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

#include #include int main() < std::string text ; std::cout

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

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

#include #include int main() < std::string text ; std::string letters; // искомые символы std::cout

Читайте также:
Как удалить программу если нет файла uninstall

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

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

#include #include int main() < std::string text ; std::string letters; // искомые символы std::cout

Пишем скрипт для поиска с помощью Python и OpenCV

В этой статье мы рассмотрим, как в кратчайшие сроки написать Python-скрипт, который пригодится для подсчёта числа книг на изображении. Для работы будем использовать библиотеку алгоритмов компьютерного зрения OpenCV.

Какова задача?

Посмотрите на фото ниже:

example_1-1801-6f4af2.jpg

На изображении мы видим 4 книги и различные отвлекающие предметы: конфету, магниты, кофе, чашку. Наша задача — найти эти 4 книги с помощью машинного зрения и не определить как книгу ни один другой предмет.

Чтобы выполнить эту задачу, мы, кроме вышеупомянутой библиотеки OpenCV, будем использовать также и NumPy, поэтому эти библиотеки понадобится установить.

Приступаем к поиску

Открываем редактор кода, создаём новый файл с именем find_books.py и начинаем:

# -*- coding: utf-8 -*- # импортируем нужные пакеты import numpy as np import cv2 # загружаем изображение, меняем цвет на оттенки серого и уменьшаем резкость image = cv2.imread(«example.jpg») gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) gray = cv2.GaussianBlur(gray, (3, 3), 0) cv2.imwrite(«gray.jpg», gray)

Прежде всего, надо выполнить импорт библиотеки OpenCV. Обратите внимание, что загрузка изображения с диска обрабатывается с помощью функции cv2.imread. Тут мы просто загружаем его с диска, после чего преобразуем цветовую гамму в оттенки серого.

Кроме этого, мы немного размываем изображение, дабы уменьшить ВЧ-шумы и увеличить точность приложения. После исполнения кода изображение будет выглядеть следующим образом:

find_books_grayscale_1-1801-dc463e.jpg

То есть мы выполнили загрузку изображения с диска, преобразовали фото в оттенки серого, а потом немного размыли изображение.

Что же, давайте определим контуры объектов на изображении:

# распознаём контуры edged = cv2.Canny(gray, 10, 250) cv2.imwrite(«edged.jpg», edged)

Теперь изображение выглядит так:

find_books_edged_1-1801-10cfb8.jpg

Итак, мы определили на изображении контуры объектов. Но, как видно, часть контуров не закрыта, а между контурами есть промежутки. Дабы убрать промежутки, существующие между белыми пикселями, задействуем операцию «закрытия»:

Читайте также:
Vod divx com регистрация телевизора LG на русском как пользоваться программой

# создаём и применяем закрытие kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (7, 7)) closed = cv2.morphologyEx(edged, cv2.MORPH_CLOSE, kernel) cv2.imwrite(«closed.jpg», closed)

Вуаля, теперь пробелы в контурах закрыты:

find_books_closed_1-1801-e4c008.jpg

Следующий этап — фактическое обнаружение контуров объектов. Теперь задействуем функцию cv2.findContours:

# находим контуры в изображении и подсчитываем число книг cnts = cv2.findContours(closed.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[1] total = 0

Теперь несколько слов о геометрии книги. Как известно — это прямоугольник, который, соответственно, имеет 4 вершины. Следовательно, если при рассмотрении контура мы обнаружим наличие 4-х вершин, мы сможем предположить, что перед нами именно книга. Чтобы это проверить, надо выполнить цикл по каждому контуру:

# выполняем цикл по контурам for c in cnts: # сглаживаем контур peri = cv2.arcLength(c, True) approx = cv2.approxPolyDP(c, 0.02 * peri, True) # если у контура есть четыре вершины, это, скорее всего, книга if len(approx) == 4: cv2.drawContours(image, [approx], -1, (0, 255, 0), 4) total += 1

При этом для каждого из контуров производится вычисление периметра (с помощью cv2.arcLength), а потом происходит аппроксимация (сглаживание) контура с помощью cv2.approxPolyDP.

Зачем выполняем аппроксимацию? Дело в том, что контур может и не быть идеальным прямоугольником, так как зашумление и тени на изображении всё же оказывают влияние. Когда мы аппроксимируем контур, мы эту проблему решаем.

В конце концов, мы осуществляем проверку, что у аппроксимируемого контура действительно есть 4 вершины. Если это так, мы рисуем вокруг книги контур с одновременным увеличением счётчика общего числа книг.

Давайте завершим этот пример и покажем полученное изображение и число книг, которые удалось найти:

# покажем результирующее изображение print(«Я нашёл книг на этой картинке».format(total) cv2.imwrite(«output.jpg», image))

На этом этапе наше фото будет выглядеть так:

find_books_output_1-1801-61f18b.jpg

Что касается терминала, то он нам покажет, что мы успешно нашли 4 книги и проигнорировали посторонние предметы:

find_books_terminal_output_1-1801-b82469.jpg

Делаем выводы

Итак, мы показали, как можно найти книги на фотографиях с помощью простых методов обработки изображений, а также компьютерного зрения, Python и OpenCV.

Кратко перескажем суть подхода: 1. Загружаем изображение с диска, преобразуем его в оттенки серого. 2. Немного размываем изображение. 3. Применяем детектор контуров Canny с целью обнаружения объектов на изображении. 4. Закрываем промежутки в контурах. 5. Находим контуры объектов на изображении.

6. Применяем контурную аппроксимацию для определения, был ли контур прямоугольником и, соответственно, книгой.

Источник: otus.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru