Как написать собственную строку содержит функцию в C # - PullRequest
0 голосов
/ 10 января 2019

Я пишу свою собственную функцию, которая проверяет, содержится ли вторая string в первой string. Я знаю, что этот метод уже реализован, но я не смог найти его исходный код, и он мне нужен для экзамена.

private static bool Contains(String s1, String s2) { //s1 = bababi, s2= babi
        int correctCharCount = 0;         
        for(int i = 0, j = 0; i < s1.Length; i++) {        
            if (s1[i] == s2[j]) {
                correctCharCount++;
                j++;
            } else {
                correctCharCount = 0;                   
                j = 0;
                i--;
            }               
        }
        Console.WriteLine("count: " + correctCharCount);
        Console.WriteLine("s2 length: " + s2.Length);
        if (correctCharCount == s2.Length) return true;
        else return false;
}

Моя проблема в том, что первые три символа из второй строки совпадают с первыми тремя символами из первой строки. 4-й символ отличается. Теперь я хочу вернуться к 3-му символу с s1 и начать отсюда снова с моим 1-м символом с s2, но я попал в петлю.

1 Ответ

0 голосов
/ 10 января 2019

Попробуйте (необходимые комментарии в коде):

public static bool Contains(string stringToSearch, string stringToFind)
{
  var maxIndex = stringToSearch.Length - stringToFind.Length;
  // String, which we want to find is bigger than string, which we want to search
  if (maxIndex < 0) return false;

  for (int i = 0; i <= maxIndex; i++)
  {
    int j;
    for (j = 0; j < stringToFind.Length; j++)
      // If we have different letters, stop comparing and go to next iteration of outer loop
      if (stringToSearch[i + j] != stringToFind[j]) break;
    // If we reached last iteration of a loop then we found the string
    if (j == stringToFind.Length) return true;
  }

  // If we reached this point, we didn't find the string
  return false;
}
...