Чтение символов из строки и подсчет каждого из них - PullRequest
0 голосов
/ 07 ноября 2018

Проблема с моим кодом заключается в следующем: я не могу понять, как читать каждый символ и суммировать каждого в один int для каждого в конце всех вращений. Вот мой код :

class Program
{
    static void Main()
    {
        SortedDictionary<string, int> text = new SortedDictionary<string, int>();
        string[] characters = Console.ReadLine()
            .Split()
            .ToArray();

        foreach (var character in characters)
        {
            if (text.ContainsKey(character))
            {
                text[character]++;
            }
            else
            {
                text.Add(character, 1);
            }
        }
        foreach (var character in text)
        {
            Console.WriteLine($"{character.Key} -> {character.Value}");
        }
    }
}

Я читаю здесь, сколько раз в Словаре существует строка. То, что мне нужно получить, написанное выше, отличается. Пожалуйста, помогите, спасибо!

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

Вы можете использовать LINQ здесь, потому что любая строка состоит из элемента char. Итак, строковый тип реализует интерфейс IEnumerable<char>:

string str = "aaabbc";
var res = str
        .GroupBy(c => c)
        .ToDictionary(g => new { g.Key, Count = g.Count() });

Пример ниже демонстрирует, как вы можете получить его без приведения к словарю, но проецируя анонимный тип и сортируя количество символов в порядке убывания:

var res2 = str
    .GroupBy(c => c)
    .Select(d => new { d.Key, Count = d.Count() })
    .OrderByDescending(x => x.Count);
0 голосов
/ 07 ноября 2018

String.Split() разбит на новые строки по умолчанию, поэтому characters содержит одну строку с целой строкой в ​​нем. Если вы хотите, чтобы каждый из символов просто избавился от Split (и измените KeyType словаря на char, чтобы соответствовать значениям):

SortedDictionary<char, int> text = new SortedDictionary<char, int>();
char[] characters = Console.ReadLine().ToArray();
// ...

https://www.ideone.com/hnMSv1

Поскольку string реализует IEnumerable<char>, вам даже не нужно преобразовывать символы в массив:

SortedDictionary<char, int> text = new SortedDictionary<char, int>();
string line = Console.ReadLine();
foreach( char character in line )
// ...

https://www.ideone.com/nLyBfC

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...