а путём обычного перебора не пойдёт
#include <windows.h>
#include <string>
#include <iostream>
#include <string.h>
#include <iomanip>
#include <vector>
using namespace std;
int main(int argc, char **argv)
{
system("chcp 1251 > nul"); // Руссификация сообщений
setlocale(LC_ALL, "Russian");
string s= "012345056056789";
string ss= "567";
string s0= "Подстрока не найдена";
size_t i=0; size_t i1=0; size_t is= s.length(); size_t iss= ss.length();
size_t flag= 0;
do
{
if(ss[i1]==s[i]) { cout << s[i1] << " = " << s[i] << endl; i++; i1++; flag++; }
else { cout << ss[i1] << " != " << s[i] << endl; i1=0; i++; flag=0; }
}while ( (i<(is-iss+1)) || (flag!=iss) );
cout << "Флаг=" << flag << "\ti= " << i << endl;
if(flag!=0) { s0=s.substr(i-iss,iss); }
cout << s0 << endl;
cout << endl << "Хелло Ворлд" << endl;
system("pause"); // system("pause > nul");
return 0;
}
Батаев ДмитрийПросветленный (23081)
22 часа назад
string s= "012345056056789";
string ss= "567";
string s0= "Подстрока не найдена";
size_t i=0; size_t i1=0;
size_t is= s.length(); size_t iss= ss.length();
size_t flag= 0;
do
{
if(ss[i1]==s[i]) { i1++; flag++; }
else { i1=0; flag=0; }
i++;
}while ( (i<(is-iss+1)) || (flag!=iss) );
if(flag!=0) { s0=s.substr(i-iss,iss); }
cout << s0 << endl;