Skip to content

Conversation

@Reckl4ma
Copy link

  • Разработать интерфейс модуля для работы со строками. Основные операции: создание, конкатенация, копирование, поиск подстроки, сравнение двух строк, изменение размера, получение указателя на массив символов
  • Разработать класс "срез строки", имеющий такой же интерфейс, как строка, но не хранящий собственных данных, а только ссылку на фрагмент существующей строки.
  • Реализовать описанные функции
  • Реализовать поиск с помощью алгоритма Кнута-Морриса-Пратта

size_ = a.size_;
capacity_ = a.capacity_;

data_ = new char[capacity_];
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

По идее, нужно выделять память только под size.

String no;
set_text(no, "ZZ");
if (text.find(no) != String::npos) { std::cout << "Fail: find not found\n"; return 1; }
}
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ещё тест производительности поиска нужен.

static constexpr size_t npos = static_cast<size_t>(-1);
String();

String(const String& a);
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Нужны конструкторы из const char * и substring.

char operator[](std::size_t index) const;

void print() const;

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Нужна конвертация в String, ещё operator==, operator<, чтобы можно было складывать в контейнер и сортировать.

total_kmp_ms += std::chrono::duration_cast<std::chrono::milliseconds>(t2 - t1).count();

t1 = std::chrono::high_resolution_clock::now();
ans_nv = find_naive(text, pat);
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

А я говорил про тест, который нужно сделать только для своего поиска.
Что какой-то большой случай работает быстрее, чем O(NM). Это должно быть видно по времени, что получается секунда, а не 10 минут.

result[i] = (*this)[i];
}

return result;
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Конструктор же есть.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants