Модификация без словаря

Дано следующее задание: Вводится текст. Конец ввода F1. В тексте найти, какая из букв первого слова встречается чаще и определить количество ее повторений. (Статические методы без использования статических полей). Код решения:

using System;
using System.Collections.Generic;
using System.Text;
namespace Лабораторная_работа_2
{
    class Program
    {
        static void Main(string[] args)
        {
            var builder = new StringBuilder();
            EnterWhileNotF1(builder);
            var dicCountLetter = CountLettersFirstWordInText(builder);
            char letter =' ';
            var count = SearchMaxCountLetter(dicCountLetter, ref letter);
            Console.WriteLine();
            Console.WriteLine("Буква '{0}' из первого слова встречалась: {1}", letter, count);
        }

        static void EnterWhileNotF1(StringBuilder text)//ввод текста до ф1
        {
            var input = Console.ReadKey();
            while (input.Key != ConsoleKey.F1)
            {
                text.Append(input.KeyChar);
                input = Console.ReadKey();
            }
        }

        static Dictionary<char, int> CountLettersFirstWordInText(StringBuilder text) //Словарь с буквами первого слова и их кол-вом в тексте
        {
            var result = new Dictionary<char, int>();          
            var textSplit = text.ToString().Split();
            InitilizeDictionary(result, textSplit[0]);
            for (int i = 1;i<textSplit.Length;i++)
            {
                foreach(var e in textSplit[i])
                {
                    if(result.ContainsKey(e))
                        result[e]++;
                }
            }
            return result;
        }

        static void InitilizeDictionary(Dictionary<char, int> dic,string firstWord)// инициализируем словарь по буквам первого слова
        {           
            foreach(var e in firstWord)
            {
                dic[e] = 0;
            }
        }

        static int SearchMaxCountLetter(Dictionary<char, int> dic, ref char letter)// ищем самую популярную букву
        {
            var max = -1;
            foreach(var e in dic)
            {
                if(e.Value > max)
                {
                    max = e.Value;
                    letter = e.Key;
                }       
            }
            return max;
        }
    }
}

Нужно решить без словаря

Сделал следующее нерабочее решение:

using System;
using System.Collections.Generic;
using System.Text;
namespace Лабораторная_работа_2
{
    class Program
    {
        static void Main(string[] args)
        {
            var builder = new StringBuilder();
            EnterWhileNotF1(builder);
            var dicCountLetter = CountLettersFirstWordInText(builder);
            char letter = ' ';
            var count = SearchMaxCountLetter(dicCountLetter);
            Console.WriteLine();
            Console.WriteLine("Буква '{0}' из первого слова встречалась: {1}", letter, count);
        }

        static void EnterWhileNotF1(StringBuilder text)//ввод текста до ф1
        {
            var input = Console.ReadKey();
            while (input.Key != ConsoleKey.F1)
            {
                text.Append(input.KeyChar);
                input = Console.ReadKey();
            }
        }

        static char[,] CountLettersFirstWordInText(StringBuilder text) //Массив с буквами первого слова || и их кол-вом в тексте
        {
            var textSplit = text.ToString().Split();
            var bukvi = new char[text.Length];
            var counter = new char[text.Length];
            var result = new char[textSplit[0].Length,2];
            for (int i = 0; i < textSplit.Length; i++)
            {
                if (textSplit[0][i] != ' ')
                {
                    bukvi[i] = textSplit[0][i];
                }
                break;
            }

            for (int i = 0; i<bukvi.Length; i++)
            {
                result[i, 0] = bukvi[i];
                //result[i, 1] = Convert.ToChar(0); AAAAAAAAAAAAAAAAAA
            }

            for (int i = 0; i < textSplit[0].Length; i++)
                for (int j = 0; i < textSplit.Length; j++)
                {
                        if ((textSplit[i][j] == result[i,0]))
                            {
                                result[i,1] = Convert.ToChar(Convert.ToInt32(result[i,1])+1);
                            }
                }
            return result;
        }

        /*static void InicilizeDictionary(Dictionary<char, int> dic, string firstWord)// инициализируем словарь по буквам первого слова
        {
            foreach (var e in firstWord)
            {
                dic[e] = 0;
            }
        }
        */

        static int SearchMaxCountLetter(char[,]result)// ищем самую популярную букву
        {
            var max = -1;
            for (int i = 0; i < result.GetLength(0); i++)
            {
                if (result[i,1] > max) 
                {
                    max = result[i, 1];
                }
            }
            return max;

        }
       
    }
}

В 46-47 строке происходит выход за пределы массива, не могу это исправить


Ответы (1 шт):

Автор решения: aepot

Если не мудрить, то примерно так получается:

private static (char, int) GetTheMostRepeatingLetter(StringBuilder sb)
{
    string text = sb.ToString();
    int count = 0;
    char result = 0;
    foreach (char letter in text.Split()[0])
    {
        int i = 0;
        foreach (char c in text)
        {
            if (c == letter)
                i++;    
        }
        if (i > count)
        {
            count = i;
            result = c;
        }
    }
    return (result, count);
}
(char c, int count) = GetTheMostRepeatingLetter(sb);
Console.WriteLine("Буква: {0}, Повторений: {1}", c, count);
→ Ссылка