analiza tekstu

0

Witam, uczę się języka C#.
Mam problem w zanalizowaniu tekstu (np. po wpisaniu słowa "kot" komputer ma wyświetlić 1-k, 1-o, 1-t).
Napisałem poniższy kod, czy da się go jakoś skrócić nie dodając całej reszty alfabetu (tak jak ja to zrobiłem z literą "a")?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ile_poszczegolnych_literek_ma_dane_zdanie
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Napisz zdanie, a komputer je zanalizuje.");
            string tekst = Console.ReadLine();
            int a = 0;
            int start = 0, pozycja = 0;
            while ((pozycja = tekst.IndexOf("a", start)) >= 0)
                {
                start = pozycja + 1;
                a += 1;
                }
            Console.WriteLine("Liczba literek \"a\" wynosi " + a);
            Console.ReadKey();
        }
    }
}
0

Jak Znasz taką strukturę danych, jak Symbol Table, to była by pomocna.

4
static void Main(string[] args)
        {
            Dictionary<char, int> occuredLetters = new Dictionary<char, int>();
            string sentence = Console.ReadLine();
            foreach(char letter in sentence)
            {
                if(occuredLetters.ContainsKey(letter))
                {
                    occuredLetters[letter]++;
                }
                else
                {
                    occuredLetters.Add(letter, 1);
                }
            }
            foreach(KeyValuePair<char, int> occureLetter in occuredLetters)
            {
                Console.WriteLine($"{ occureLetter.Key} : {occureLetter.Value}");
            }
        }

Możesz też spróbować z użyciem mapy (słownika). Tak na szybko zrobione.

0

Musisz zrobić tablicę, w której dla każdej literki będziesz miał jedną kratkę. Potem idź znak po znaku i inkrementuj wartość w odpowiedniej komórce tabeli. Na koniec przeleć tabelę i wypisz wyniki.

1

tekst.GroupBy(c => c).Select(c => new { Char = c.Key, Count = c.Count()});

0

Koledzy podają rozwiązania lepsze od mojego, ale uwierz mi i posłuchaj mnie, a dobrze na tym wyjdziesz :)

A na poważnie, to na Twoim poziomie powinieneś rozpracować tablice i podwójne pętle. Bo zadanie możesz też rozwiązać pętlą w pętli. Pętla po literkach, a w środku pętla po ciągu wejściowym. To nie optymalne, ale to, wydaje mi się, odpowiednia droga dla Ciebie. Jak już zrobisz to takimi sposobami, dopiero wtedy próbuj użyć magii...

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