Q:

Как найти все вхождения подстроки во фразу, за не более N-циклов? 

Дана фраза

(алгоритм - набор инструкций, описывающих порядок действий исполнителя для достижения результата решения задачи по конечное число действий, система правил выполнения дискретного процесса, достигает поставленной цели за конечное время.  Для визуализации алгоритмов часто используют блок-схемы)

и подстрока (алгоритм). 
Найти все вхождения подстроки в фразу, если таковых нет, выдать сообщение.  Программа должна выполнять не более N-циклов.  Где N - необходимо ввести. 
Возможна реализация на С#, С++, Java. 

Я начал делать на C#. 
Код:
    string s1 = "алгоритм – алгоритм набір інструкцій, які описують порядок дій виконавця, щоб досягти результату розв'язання задачі за скінченну кількість дій; система правил виконання дискретного процесу, яка досягає поставленої мети за скінченний час.  Для візуалізації алгоритмів часто використовують блок-схеми";
    string s2 = "алгоритм";

    Console. Write("Выполнить не больше: " );
    int N = int. Parse(Console. ReadLine());

    int i = 0;  
    int x = -1; 
    N = -1;
    while (i ! = -1)
    {
        i = s1.IndexOf(s2, x + 1);
        x = i; 
        N++;
    }
    Console. WriteLine("Количество вхождений слова алгоритм: " + N);

    Console. ReadLine();

Не могу понять, как ограничить количество нахождений, чтобы выполнилось не более N- заданных повторений. 

A:

string s1 = "алгоритм – алгоритм набір інструкцій, які описують порядок дій виконавця, щоб досягти результату розв'язання задачі за скінченну кількість дій; система правил виконання дискретного процесу, яка досягає поставленої мети за скінченний час.  Для візуалізації алгоритмів часто використовують блок-схеми";
string s2 = "алгоритм";

Console. Write("Выполнить не больше: ");
int N = int. Parse(Console. ReadLine());

int iterationsCount = -1;
int nextIndex = -999; 
while (nextIndex ! = -1 && iterationsCount < N) {
    nextIndex = s1.IndexOf(s2, nextIndex == -999 ?  0 : nextIndex + 1); 
    iterationsCount++;
}

Console. WriteLine("Количество вхождений слова `" + s2 + "`: " + iterationsCount);
Console. ReadLine();

