Problem z obliczaniem liczby wystąpień ciągu znaków

0

Hej
Mam za zadanie napisać bibliotekę zawierającą metody(rozszerzające typ string) służące do analizy pliku tekstowego.
Nie wiem jak napisać 2 z nich, mianowicie:
-Metodę obliczającą liczbę wystąpień określonego ciągu znaków.
-Metodę obliczającą liczbę wystąpień określonej frazy. Metoda powinna mieć dwie wersje,
jedną uwzględniającą wielkości liter, drugą obliczającą ilość wystąpień danej frazy bez
względu na wielkość liter ją tworzących.

Dla przykładu metodę obliczającą ilość wystąpień określonej litery, bez względu na wielkość napisałem w ten sposób:

  public static void Ilosc_Litera(this string odczyt)
        {
            char litera;
            do
            {
                Console.WriteLine("Jaką literę chcesz zliczyć: ?");
            }
            while (!char.TryParse(Console.ReadLine(), out litera) || !char.IsLetter(litera));

            int licznik = 0;

            foreach (char czyLitera in odczyt)
            {
                if (char.ToLower(czyLitera) == litera || char.ToUpper(czyLitera) == litera)
                    licznik++;
            }
            if (licznik > 0)
                Console.WriteLine("Wybrana litera występuje następującą ilość razy: {0}", licznik);
            else
                Console.WriteLine("Wybrana litera nie występuje.");
        }

Będę bardzo wdzięczny za pomoc, bo już próbowałem to zrobić na kilka różnych sposobów(z marnym skutkiem) i już nie mam więcej pomysłów ;/

dodanie znacznika <code class="csharp"> - fp

0

Przede wszystkim te metody na pewno nie powinny nic pisać ani czytać z konsoli. Ciąg znaków do wyszukania powinien być przekazany jako parametr, np.: public static int PoliczWystapienia(this string s, string wzorzec). Metoda zwraca int, bo chyba wypadałoby, żeby metoda, która coś liczy zwracała liczbę, a nie void. ;]
A co wnętrzem tej metody? Albo własna implementacja na podstawie któregoś z algorytmów wyszukiwania wzorca, albo umiejętne użycie metody string.IndexOf.

0

-Metodę obliczającą liczbę wystąpień określonego ciągu znaków.
-Metodę obliczającą liczbę wystąpień określonej frazy.

  1. czym się różni „ciąg znaków” od „frazy”?
  2. ile razy ana występuje w ciągu banana?
0

@Azarien faktycznie sam sobie na początku zadawałem to pytanie. Teraz rozumiem, że dla słowa "banana" jest 1 ciąg znaków "ana" i 2 frazy "ana". Metodę dla ciągu znaków już mi się udało napisać. Wygląda następująco:

   public static int Ilosc_CiagZnakow(this string odczyt, string wzorzec) 
        {
            int licznik = 0;
         
       for (int i = 0; i < odczyt.Length - wzorzec.Length; i++)
       {
           if (wzorzec == odczyt.Substring(i, wzorzec.Length))
               licznik++;
       }
          return licznik;
       
        }

Szczerze mówiąc nie mam pomysłu jak przerobić tę metodę, aby zwracała ilość wystąpień określonej frazy ;/

0

Jak na moje to Twój program zlicza ciągi znaków właśnie ilość fraz w określonym wyrazie.
Jedna mała zmiana to znak mniejsze równe. Sprawdź przykład z banana ;]

for (int i = 0; i <= odczyt.Length - wzorzec.Length; i++) 

co do zliczania wystąpień ciągów znaków czy jak to jest w Twojej nomenklaturze to zamiast i++ przesuwaj się o długość wzorca w przypadku znalezienia porównania.

1

Dla ciągu znaków przesuwaj licznik o długość znalezionego ciągu. Dla frazy przesuwaj licznik o 1, niezależnie od długości frazy.

0

Dzięki wszystkim za pomoc. Teraz już jest wszystko OK :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1