дано две строки. найти количество вхождений строки S2 в строку S1
Primary tabs
Forums:
//Короче. дано две строки. найти количество вхождений строки S2 в строку S1 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Console.WriteLine("Введите первую строку"); string s1 = (Console.ReadLine()); Console.WriteLine("Введите вторую строку");//Подстрока, количество вхождений которой нужно найти string s2 = (Console.ReadLine()); int i = 0; // Числовая переменная, контролирующая итерации цикла int x = -1; // Так как метод IndexOf() возвращает "-1" если первое вхождение подстроки не найдено, то приходится использовать вспомагательную, вместо і, что б начать цикл int count = -1; // Записываем количество вхождений (итераций цикла) while (i != -1) { i = s1.IndexOf(s2, x + 1); // получаем индекс первого вхождения х+1 говорит, что начинать нужно с 0-го индекса, тоесть с буквы "П" x = i; // соответственно присваиваем номер индекса первого значения, что б потом (х+1) начать со следующего count++; // Увеличиваем на единицу наше количество } Console.WriteLine(count); Console.ReadLine(); } } } //Но он сказал нельзя пользоваться .IndexOf
Чтобы самому реализовать проверку тебе надо:
- разбить строку на символы и начать перебирать их (назовём её первой)
- + разбить на символы (превратить в массив символов) ту строку, которая может быть входит в первую. (назовём её второй)
- Потом циклом перебираешь (можно использовать while) символы первой строки и сравниваешь каждый из них с первым символом второй строки -
- если первый символ второй строки и очередной символ первой строки совпадают - можно запустить внутренний цикл сравнения оставшегося куска второй строки (всех символов кроме первого - их сравнивай на условии входа во внутренний цикл - условие - это if ( )) и следующих символов первой.
- Если во внутреннем цикле происходит несовпадение - выходим из него во внешний цикл - и тот символ первой строки, что не совпал с очередным символом второй строки снова сравниваем с первым символом второй строки - но уже во внешнем цикле - иначе можно пропустить ситуацию типа:
абваабв1234 // где ищем абв // что ищем
из двух строк выше видно, что прокручивая внутренний цикл надо обязательно - при выходе во внешний начинать проверку
с того символа, на котором произошла неудача сравнения во внутреннем цикле
- Log in to post comments
- 12774 reads