Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
Renji
2551 / 1746 / 525
Регистрация: 05.06.2014
Сообщений: 5,077
1

STL функция для проверки является ли одна последовательность началом другой

18.09.2017, 02:24. Просмотров 869. Ответов 10
Метки нет (Все метки)

Нет ли в STL готовой функции для проверки того что последовательность А является началом последовательности Б? Да, написать свое не сложно. Но готовое взять явно проще.
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.09.2017, 02:24
Ответы с готовыми решениями:

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

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

Проверить, является ли одна строка анаграммой для другой строки
прошу помощи с кодом в коде я сделал следующее : - привел строки к нижнему регистру - убрал...

Функция или метод для проверки, является ли строка представлением заданного числа
1. Создать функцию или метод, для работы со строками и использовать в программе. Strcpy 2....

Определить, является ли одна строка подстрокой другой
var t:boolean; i,j:integer; s1,s2:string; begin t:=true; writeln(); readln(s1);...

10
Manowar
2232 / 576 / 186
Регистрация: 12.03.2016
Сообщений: 2,162
Завершенные тесты: 1
18.09.2017, 06:35 2
Может search подойдет.
http://www.cplusplus.com/reference/algorithm/search/?kw=search
http://ru.cppreference.com/w/cpp/algorithm/search
0
Renji
2551 / 1746 / 525
Регистрация: 05.06.2014
Сообщений: 5,077
18.09.2017, 06:37  [ТС] 3
Цитата Сообщение от мановар Посмотреть сообщение
Может search подойдет.
Это будет перебирать всю последовательность Б, тогда как надо только ее начало.
0
Геомеханик
809 / 612 / 940
Регистрация: 26.06.2015
Сообщений: 1,409
18.09.2017, 06:54 4
C++
1
2
3
4
5
int A[] = { 1, 2, 3 };
int B[] = { 1, 2, 3, 4, 1, 2 };
 
if(std::equal(A, A + sizeof(A)/sizeof(A[0]), B))
    std::cout << "Yes";
1
18.09.2017, 06:54
Manowar
2232 / 576 / 186
Регистрация: 12.03.2016
Сообщений: 2,162
Завершенные тесты: 1
18.09.2017, 06:56 5
То есть А входит в Б?
А - 4,5,6,7
Б - 4,5,6,7,8,3,5, ......
0
Renji
2551 / 1746 / 525
Регистрация: 05.06.2014
Сообщений: 5,077
18.09.2017, 08:32  [ТС] 6
Цитата Сообщение от Геомеханик Посмотреть сообщение
std::equal(A, A + sizeof(A)/sizeof(A[0]), B)
Если учесть случай когда A длиннее Б, то в одну строчку с std::equal уже не получается. Но да, наиболее близкий к желаемому вариант.
Цитата Сообщение от мановар Посмотреть сообщение
То есть А входит в Б?
То есть, Б начинается с А. Да, как в вашем примере. Но если пример чуток переправить:
А - 4, 5, 6, 7
Б - 1, 1, 1, 1, 1, 1, 4, 5, 6, 7
find начнет перебирать все эти единички.
0
Manowar
2232 / 576 / 186
Регистрация: 12.03.2016
Сообщений: 2,162
Завершенные тесты: 1
18.09.2017, 09:55 7
Цитата Сообщение от Renji Посмотреть сообщение
Но если пример чуток переправить:
Если его чуток переправить, то А уже никак не будет являться началом последовательности Б.
Если в примере Геомеханик, взять
C++
1
int B[] = { 1, 1, 2, 3, 4, 1, 2 };
то equal в данном случае не сработает. Придется опять чего нибудь мутить.
А так equal и смотреть, в зависимости от размера, что с чем сравнивать.
0
Renji
2551 / 1746 / 525
Регистрация: 05.06.2014
Сообщений: 5,077
18.09.2017, 09:57  [ТС] 8
Цитата Сообщение от мановар Посмотреть сообщение
Если его чуток переправить, то А уже никак не будет являться началом последовательности Б.
Так я и не говорю что А является началом. Я говорю что мне надо проверить является ли А началом.
0
GbaLog-
Любитель чаепитий
3203 / 1504 / 472
Регистрация: 24.08.2014
Сообщений: 5,275
Записей в блоге: 1
Завершенные тесты: 2
18.09.2017, 10:25 9
Лучший ответ Сообщение было отмечено Renji как решение

Решение

Цитата Сообщение от Renji Посмотреть сообщение
Нет ли в STL готовой функции для проверки того что последовательность А является началом последовательности Б?
starts_with есть в бусте, в стандартной библиотеке такого нет.
либо std::equal, либо свой велосипед.
1
COKPOWEHEU
2131 / 1257 / 288
Регистрация: 09.09.2017
Сообщений: 5,116
18.09.2017, 12:03 10
man memcmp
0
Renji
2551 / 1746 / 525
Регистрация: 05.06.2014
Сообщений: 5,077
18.09.2017, 12:28  [ТС] 11
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
man memcmp
Опять же, не учитывает что А может быть длиннее Б. Плюс, как-то плохо дружит с итераторами.
0
18.09.2017, 12:28
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.09.2017, 12:28

Определить является ли одна строка секвенцией другой
Привет всем, я что-то не могу дойти до решения следующего задания: Нужно протестировать,...

Проверить, является ли одна из очередей частью другой
Создайте две очереди. Проверьте, одна из очередей частью другой. Решение в программе оформляйте...

Определить, является ли одна строка перестановкой другой
Для двух строк написать метод, определяющий, является ли одна строка перестановкой другой. Регистр...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.