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

210
12 сентября 2018, 17:10

Дана фраза

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

и подстрока (алгоритм).

Найти все вхождения подстроки в фразу, если таковых нет, выдать сообщение. Программа должна выполнять не более 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- заданных повторений.

Answer 1
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();
Answer 2

Пользуйтесь регулярным выражением, очень легко определить вхождения:

public class Application {
    private static final Pattern REGEX = Pattern.compile("(?ui)(алгоритм)");
    private static final String TEXT = "алгоритм – алгоритм набір інструкцій, які описують порядок дій виконавця, "
            + "щоб досягти результату розв'язання задачі за скінченну кількість дій; "
            + "система правил виконання дискретного процесу, яка досягає поставленої мети за скінченний час. "
            + "Для візуалізації алгоритмів часто використовують блок-схеми.";
    private static final int number = 2;
    public static void main(String[] args) {
        Matcher matcher = REGEX.matcher(TEXT);
        int count = 0;
        while (count != number && matcher.find()) {
            count++;
            System.out.println(matcher.group(1));
        }
    }
}
READ ALSO
Material icons не работает outline

Material icons не работает outline

Почему так работает:

204
помогите сделать Css фигуру

помогите сделать Css фигуру

помогите сделать такую фигуру, очень надобуду признателен

225
Как в CSS сделать тень только в одну сторону

Как в CSS сделать тень только в одну сторону

Как в CSS задать тень блоку, чтобы она была только с одной стороны? Пример: есть блок, нужно задать ему некую тень справаТень должна быть с правой...

213