Это моя функция, я запускал с -std=c++17 -Wall -Wextra
с clang
и gcc
на godbolt
;
оба компилятора не выдавали ошибок;
функция возвращает 0
, при пустой игле; возвращает -1
, если игла не найдена, и index
первого вхождения при совпадении.
int strStr(string haystack, string needle) {
if ( needle.empty( ) ) return 0;
std::size_t n_len = needle.size();
if( needle.size() > haystack.size() ) return -1;
int index = 0;
for ( auto it = haystack.begin(); it != haystack.end(); ++it )
{
std::cout << std::string( it, it + n_len ) << std::endl;
if ( std::string( it, it + n_len ) == needle ) return index; // hear also
//if ( !*(it + n_len ) ) break;
index++;
}
return -1;
}
Я знаю, что могу получить результаты, используя find
или substr
;
Я тестировал с помощью ниже, он должен выдавать ошибку, когда я получаю доступ за пределы, но без ошибок;
int main()
{
std::cout << strStr( "aabaaaababaababaa", "bbbb") << std::endl; // prints -1
std::cout << strStr( "hello", "ll") << std::endl; // prints 2
std::cout << strStr( "mississippi", "issip") << std::endl; // prints 4
std::cout << strStr( "ab", "a") << std::endl; // prints 0
}
Спасибо за ваше время и помощь;