дано две строки. найти количество вхождений строки 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
- 13295 reads