Częstość występowania poszczególnych znaków w łańcuchu

0

Napisz program w c# analizujący częstość występowania poszczególnych znaków w łańcuchu znaków wprowadzonym przez użytkownika. Np. dla wprowadzonego tekstu „abrakadabra” program powinien wyświetlić informacje: a – 5, b – 2, r – 2, k – 1, d – 1.

Proszę o pomoc, bo nie wiem jak się za to zabrać

1

Coś takiego?

using System;
using System.Text;


public class Test
{
   public static void Main()
   {
       string input = "Abrakadabra";
       string output = CountAllChars(input);
       Console.WriteLine(output);
       Console.ReadLine();
   }


   static string CountAllChars(string s)
   {
       if (s == null) return null;
       if (s == "") return "";
       s  = s.ToLower();
       char[] chars = s.ToCharArray();
       Array.Sort(chars);
       StringBuilder sb = new StringBuilder();
       int count = 0;
       for (int i = 0; i < chars.Length; i++)
       {
          if (chars[i] < 'a' || chars[i] > 'z') continue;
          if (sb.Length == 0)
          {
             sb = sb.Append(chars[i]);
             count = 1;
          }
          else if (chars[i] == chars[i-1])
          {
             count++;
          }
          else
          {
             sb = sb.Append(count.ToString());
             sb = sb.Append(chars[i]);
             count = 1;
          }
       }
       sb = sb.Append(count.ToString());
       return sb.ToString();
   }
}
0

szczerze mówiąc to widzę tu same nieznane słowa, których jeszcze nie mieliśmy na studiach

1

Możesz po prostu sprawdzać każdą kolejną literę czy jest a, czy b itd. i zliczać ich występowanie.

4

Albo jeszcze ładniej - słownikiem:

static string CharCount(string word)
{
    word = word.ToLower(); // Zmień wszystkie litery na małe
    var charCount = new Dictionary<char, int>();

    // Dla każdego znaku w string'u
    foreach(char character in word)
    {
        if(charCount.ContainsKey(character))
        {
            // Jeżeli w słowniku jest już wpisany znak
            // Zinkrementuj ilość wystąpień o 1
            charCount[character]++;
        }
        else
        {
            // W przeciwnym wypadku dodaj znak
            // oraz ustaw ilość wystąpień jako 1
            charCount[character] = 1;
        }
    }

    // Konwertowanie słownika na 1 string z wystąpeniami
    string countAsString = "";
    foreach(var character in charCount)
    {
        countAsString += character.Key + "-" + character.Value + " ";
    }
    countAsString.TrimEnd(' '); // Usuń ostatnią spację
    return countAsString;
}

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