Ввести строку и образец поиска. Найти позиции в строке, совпадающие с образцом и вывести их. что-то я просто не очень понимаю, как это сделать...
Полагаю, условие должно звучать так: Даны исходная строка и подстрока. Найти в исходной строке все позиции, которые являются началом подстроки. У класса string в c++ есть метод как раз для этой задачи: #include <iostream> using namespace std; int main(int argc, char const *argv[]) { std::string str = "aaaaabbbaaabbaaaabbbbaaaaa"; size_t pos = 0; while (true) { pos = str.find("bbb", pos+1); if(pos < str.size()) std::cout << "Found at pos = " << pos << "\n"; else break; } return 0; } Код #include <iostream> using namespace std; int main(int argc, char const *argv[]) { std::string str = "aaaaabbbaaabbaaaabbbbaaaaa"; size_t pos = 0; while (true) { pos = str.find("bbb", pos+1); if(pos < str.size()) std::cout << "Found at pos = " << pos << "\n"; else break; } return 0; } Моё решение в стиле си (очень стрёмное): #include <stdio.h> int MyStrTok(const char* g_str, const char* substr) { static const char* str; static int it; if(g_str != NULL) { str = g_str; it = 0; return 0; } if(str == NULL) return -1; while(str[it] != '\0') { if(str[it] == substr[0]) { int it2 = it, it3 = 0, start = it; while(str[it2] == substr[it3] && str[it2] != '\0' && substr[it3] != '\0') { it2++; it3++; } if(substr[it3] == '\0') { it++; return start; } } it++; } return -1; } int main(int argc, char const *argv[]) { const char* str = "aaaaabbbaaabbaaaabbbbaaaaa"; const char* substr = "bbb"; MyStrTok(str, NULL); int index = 0; while (index != -1) { index = MyStrTok(NULL, substr); printf("%d\n", index); } return 0; } Код #include <stdio.h> int MyStrTok(const char* g_str, const char* substr) { static const char* str; static int it; if(g_str != NULL) { str = g_str; it = 0; return 0; } if(str == NULL) return -1; while(str[it] != '\0') { if(str[it] == substr[0]) { int it2 = it, it3 = 0, start = it; while(str[it2] == substr[it3] && str[it2] != '\0' && substr[it3] != '\0') { it2++; it3++; } if(substr[it3] == '\0') { it++; return start; } } it++; } return -1; } int main(int argc, char const *argv[]) { const char* str = "aaaaabbbaaabbaaaabbbbaaaaa"; const char* substr = "bbb"; MyStrTok(str, NULL); int index = 0; while (index != -1) { index = MyStrTok(NULL, substr); printf("%d\n", index); } return 0; } Результат: 5 17 18