Матч 361, Поиск текста (SearchBox)

Дивизион 2, Уровень 1

 

Найти в тексте text подстроку search, которая встречается не раньше позиции start. Если wholeWord = “Y”, то подстрока search должна выступать отдельным словом. Если подстрока search с требуемыми условиями в тексте text не встречается, то вернуть -1.

 

Класс: SearchBox

Метод: int find(string text, string search,

                string wholeWord, int start)

Ограничения: text и search содержат от 1 до 50 символов ‘a’ – ‘z’, ‘A’ – ‘Z’, wholeWord содержит “Y” или “N”, 0 £ start < text.size().

 

Вход. Текст text, искомая подстрока search, условие поиска wholeWord, позиция start, с которой начинается поиск.

 

Выход. Номер позиции, с которой начинается искомая подстрока, удовлетворяющая заданным условиям.

 

Пример входа

text

search

wholeWord

start

“We dont need no education”

“ed”

“N”

13

“No dark sarcasm in the classroom”

“The”

“Y”

5

“All in all youre just another brick in the wall”

“just”

“Y”

17

 

Пример выхода

16

-1

17

 

РЕШЕНИЕ

обработка строк

 

Если wholeWord = “Y”, то добавим к началу и в конец текста и искомой подстроки по пробелу. В результате поиск будет удачным, если исходная подстрока слева и справа от себя содержит пробел, то есть является отдельным словом. Для поиска подстроки воспользуемся функцией find класса string.

 

ПРОГРАММА

 

#include <cstdio>

#include <string>

using namespace std;

 

class SearchBox

{

public:

  int find(string text,string search,string wholeWord,int start)

  {

   if (wholeWord[0] == 'Y')

      search = " " + search + " ",

      text = " " + text + " ";

    return text.find(search,start);

  }

};