Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Развитие в C++ Здравствуйте! В настоящий момент я учусь в университете по специальности "Информационные системы и технологии". Мы изучаем C и C++. Сейчас прохожу преддипломную практику. Нужно написать программу,... https://www.cyberforum.ru/ cpp-beginners/ thread2415366.html C++ Найти значение члена последовательности чисел составленных из заданных десятичных цифр
Здравствуйте . В общем нужна помощь. программа должна найти и сообщить число, записанное с помощью цифр 1, 2, 6(1, 2, 6, 11, 12, 16, 21, 22, 26, 61 ,62 ,66, 111....) стоящее на определенном...
C++ Передать шаблон std::array в другой шаблон https://www.cyberforum.ru/ cpp-beginners/ thread2415315.html
Шаблон std::vector передать получается: template <class T, template<class U, class = allocator<U> >class Seq > class A{ Seq<T> vect; }; A<int, vector> a; А как передать шаблон...
C++ Функция возвращающая наиболее часто встречаемый символ Прошу помощи , по скольку сам новичок , не очень понимаю как сделать . Написать функцию, которая возвращает символ, который встречается в строке чаще всего. Заголовок функции: char mostly (const... https://www.cyberforum.ru/ cpp-beginners/ thread2415300.html
C++ Вычислить синус ,округлить до сотых и записать в string
Вычислить синус ,округлить до сотых и записать в string я пробовал так но не пашет,выдает 1 double cal_sin(double n) { double x = n, result; result = sin(x);
C++ Вычислить и вывести на экран в виде таблицы значения функции, заданной графически https://www.cyberforum.ru/ cpp-beginners/ thread2415261.html
Вычислить и вывести на экран в виде таблицы значения функции, заданной графически, на интервале от х(нач) до х(кон) с шагом dx. Интервал и шаг вводить с клавиатуры. Таблицу снабдить заголовком и...
C++ Получение буквы диска через SetupApi Всем привет! Мне необходимо получить букву, которую ОС присваивает USB-накопителю. Так я получаю имена USB устройств HDEVINFO Handle = SetupDiGetClassDevs(&GUID_DEVCLASS_DISKDRIVE, NULL,... https://www.cyberforum.ru/ cpp-beginners/ thread2415250.html Подсчет Расходов C++
Доброго времени суток, прошу у вас помощи справиться с простой задачей по подсчету денежных средств. Данные : 1 золотая монета, состоит из 9.999 серебряных монет. Стоимость товара на прилавке...
C++ String subscript out of range #include <SFML/Graphics.hpp> #include <sstream> #include <iostream> using namespace sf; const int H = 5; const int W = 15; String Map = { "BBBBBBBBBBBBBBBBBBBB" https://www.cyberforum.ru/ cpp-beginners/ thread2415228.html C++ Определить номера ячеек массива которые после сортировки переместились https://www.cyberforum.ru/ cpp-beginners/ thread2415215.html
есть одномерный массив. вводится с клавиатуры (например 5 3 5 2 3 5) сортировали swap (стал 5 5 5 3 3 2) надо что б на экран вывело номера ячеек, которые стояли не на своих местах. (ответ 2 4 6)...
C++ Передача вектора структур из класса в другой класс
Здравствуйте форумчане, собсно есть два класса в первом создаётся и заполняется вектор структур(Prtotected),во втором(:Protected class1) должно происходить его изменение,но при передаче его он...
C++ System.String. Можно ли из букв первого слова составить второе слово? https://www.cyberforum.ru/ cpp-beginners/ thread2415173.html
Задание следующее: Вывести сообщение "МОЖНО", если из букв введённой строки X можно составить введенную строку Y, при условии, что каждую букву строки X можно использовать один раз; и сообщение...
610 / 415 / 151
Регистрация: 11.01.2019
Сообщений: 1,746
10.03.2019, 12:30 0

Найти все возможные подстроки в строке - C++ - Ответ 13390689

10.03.2019, 12:30. Показов 4188. Ответов 3
Метки (Все метки)

Ответ

Цитата Сообщение от SomebodyWhoKnow Посмотреть сообщение
Видимо давно и неправда. Я не нашел.
Видимо, кому-то надо учиться пользоваться гуглом...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <iostream>
#include <cstring>
#include <vector>
#include <set>
#include <algorithm>
 
// факториал n
long long F(int n) {
    if (n < 2) return 1LL;
    long long f = 1LL;
    for (int i = 2; i <= n; ++i) f *= i;
    return f;
}
 
// число бесповторных сочетаний из n по m
long long C(int n, int m) {
    if (m < 1 || n < 1 || m > n) return 0LL;
    return F(n) / (F(m) * F(n - m));
}
 
// получить подстроку с порядковым номером i
void ith_substring(long long i, int m, int n, const char * src_string, std::string & substring ) {
    if (m == 0 || !*src_string) return;
    if (m == n) {
        while (*src_string) substring.push_back(*src_string++);
        return;
    }
    if (long long c = C(n - 1, m); i <= c) 
        ith_substring(i, m, n - 1, src_string + 1, substring);
    else {
        substring.push_back(*src_string);
        ith_substring(i - c, m - 1, n - 1, src_string + 1, substring);
    }
}
 
// получить все подстроки без учета повторений (возврат - число полученных подстрок)
long long all_substrings(const std::string & str, std::set<std::string> & substrings) {
    std::string substr;
    substrings.clear();
    long long c_total = 1LL;
    int n = str.size(), m = 1;
    while (m <= n) {
        long long c = C(n, m), i = 1;
        while (i <= c) {
            ith_substring(i, m, n, str.c_str(), substr);
            if (substrings.insert(substr).second) ++c_total;
            substr.clear();
            ++i;
        }
        ++m;
    }
    return c_total;
}
 
int main()
{
    // тест
    std::string str = "abbcdeefg";
    std::set<std::string> substrings;
    std::cout << "Source string: " << str.c_str() << std::endl;
    std::cout << all_substrings(str, substrings) << " substrings were found: " << std::endl;
    for (const auto & s : substrings) std::cout << s.c_str() << std::endl;
    return 0;
}


Вернуться к обсуждению:
Найти все возможные подстроки в строке C++
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.03.2019, 12:30
Готовые ответы и решения:

Найти в исходной строке все вхождения заданной подстроки и заменить их на другую строку
Найти в исходной строке все вхождения (но не более девяти) заданной подстроки и заменить их на...

Найти все подстроки в строке
Есть строка, следующего вида: ...&lt;div class=&quot;b-list__item&quot;&gt;&lt;a...

Найти все подстроки в строке
var Str1, Str2: String; P: Integer; { ... } Str1:='Hi! How do you do?'; Str2:='do'; ...

Как найти все подстроки в строке?
Как найти все подстроки в строке, а не только одну?

3
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.03.2019, 12:30
Помогаю со студенческими работами здесь

Найти в строке все повторяющиеся подстроки
может есть какой-нибудь встроенный метод? ну то есть SPMRVBVBBBURQGIBDUGRNICJRVUAXSSR...

С использованием функции найти все вхождения подстроки в строке
Всем логимыслящим Большой Привет! Помогите меня избавить от страданий написать программу...Лайками...

Найти и заменить в исходной строке все вхождения заданной подстроки
Найти в исходной строке все вхождения (но не более девяти) заданной подстроки и заменить их на...

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

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru