Member 13975230 Ответов: 2

Как подсчитать количество встречающихся букв в строке?


Итак, у меня уже есть код, который подсчитывает, сколько вхождений Буквы в строку. Теперь я не знаю, как сделать так, чтобы он считал символ(например, сколько "!" есть). У меня есть строка с алфавитом и одной пользовательской буквой "А", поэтому мне нужно знать, как использовать эти буквы из "R"("string R = "..." ) для подсчета встречаемости Буквы в консоли. Я слышал, что лучший способ-использовать indexof (), но я понятия не имею, как его использовать?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;
using System.IO;

namespace _5._1
{
    class LetterOccur
    {
        private const int CMax = 256;
        private int[] Rn;
        public string eil { get; set; }
        public string R = "AĄBCDEFGHIJKLMNOPRSTUVQZW";
        public LetterOccur()
        {
            eil = "";
            Rn = new int[CMax];
            for (int i = 0; i < CMax; i++)
            {
                Rn[i] = 0;
            }
        }
        public int Take(char sim)
        {
            return Rn[sim];
        }

        public void many()
        {
            for (int i = 0; i < eil.Length; i++)
            {
                if (('A' <= eil[i] && eil[i] <= 'Z')||(('a' <= eil[i] && eil[i] <= 'z')))
                {
                    Rn[eil[i++]]++;
                }
            }
        }
    }
    class Program
    {
        const string CFr = "..\\..\\Rezults.txt";
        static void Main(string[] args)
        {
            LetterOccur eil = new LetterOccur();
            string R = "AĄBCDEFGHIJKLMNOPRSTUVQZW";
        Console.WriteLine("Enter a line of words: ");
            string line = Console.ReadLine();
            eil.eil = line;
            eil.many();
            print(CFr, eil, R);
        }
        static void print(string fv, LetterOccur eil, string R)
        {
            using (var fr = File.CreateText(fv))
            {
                for (char sim = 'a'; sim <= 'z'; sim++)
                {
                    fr.WriteLine("{0, 3:c} {1, 4:d} |{2, 3:c} {3, 4:d}",
                    sim, eil.Take(sim),
                    Char.ToUpper(sim), eil.Take(Char.ToUpper(sim)));
                }
            }
        }
    }
}


Что я уже пробовал:

Не знаю, как считать пользовательские символы в C#

2 Ответов

Рейтинг:
2

Aydin Homay

Привет,
Как насчет того, чтобы попытаться сделать ваш код более простым, например:

string your_string = "abc!defgh!jkl";

//Solution 1 - remove the character and subtract the length.
int result1 = your_string.Length - your_string.Replace("!", "").Length;

//Solution 2 - split the string into an array by using your target character as a delimiter
int result2 = your_string.Split('!').Length - 1;

//Solution 3 - use the LINQ 
int result3 = your_string.ToCharArray().Count(c => c == '!');


Овации,
АХ


Richard Deeming

Вы можете сделать решение 3 еще проще, удалив .ToCharArray() вызов. :)

Рейтинг:
0

OriginalGriff

Взгляните на это: Подсчет строк в строке[^] он основан на строках (поэтому есть некоторые биты, которые вы можете игнорировать), но newline-это просто символ в текстовом файле, поэтому большинство методов, которые он показывает, будут работать для любого символа.

Чтобы узнать, сколько каждого символа есть в вашей строке в одной строке, это будет работать:

string input = "ABCDABDFGHI";
Dictionary<char, int> counts = input.GroupBy(x => x).ToDictionary(x => x.Key, x => x.Count());
Каждый элемент словаря будет являться символом и сколько раз он появляется.