Как посимвольно пройтись по массиву

Пишу приложение на c# c помощью windows forms, суть которого заключается в подсчете гласных, согласных, цифр и знаков препинания в тексте, который вводится либо вручную пользователем либо считывается из файла Скриншот программы с пояснениями

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

Код обработчика кнопки заменить:

private void buttonReplace_Click(object sender, EventArgs e)
        {
            if (textBoxInput.Text == "")
            {
                MessageBox.Show("Вы не ввели текст!", "Ошибка",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Information);
            }
            else
            {
                int glasnie = 0;
                int soglasnie = 0;
                int znakiPrep = 0;
                int numbers = 0;

                int count = textBoxInput.Text.Length;
                string[] mas = new string[textBoxInput.Text.Length];
                for (int index = 0; index < count; index++)
                {

                    if (mas[index] == "а" || mas[index] == "о" || mas[index] == "и"
                        || mas[index] == "е" || mas[index] == "ё" || mas[index] == "э"
                        || mas[index] == "ы" || mas[index] == "у"
                        || mas[index] == "ю" || mas[index] == "я")
                    {
                        glasnie++;
                    }

                }
                textBoxOutput.Text = textBoxOutput.Text + "Гласных: " + glasnie;
            }
        }

Как пройтись по массиву посимвольно? Прошу объяснить максимально просто, так как с# только начал изучать:)


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

Автор решения: Макс Пушной

Вместо

for (int index = 0; index < count; index++)

Нужно использовать

foreach (char c in textBoxInput.Text)
→ Ссылка
Автор решения: Bulson

Такой класс для анализа текста

class TextAnalyzer
{
    private readonly char[] _chars;
    private readonly char[] _vowels;

    private List<char> _letters;
    private List<char> _digits;
    private List<char> _others;

    public TextAnalyzer(char[] chars)
    {
        _chars = chars;
        _vowels = new char[] { 'а', 'А', 'е', 'Е', 'ё', 'Ё', 'и', 'И',
            'о', 'О', 'у', 'У', 'ы', 'Ы', 'э', 'Э', 'ю', 'Ю', 'я', 'Я' };

        _letters = new List<char>();
        _digits = new List<char>();
        _others = new List<char>();

        SetResults();
    }

    //число согласных
    public int ConsonantsCount { get; private set; }
    //число гласных
    public int VowelsCount => _letters.Count - ConsonantsCount;
    //цифры
    public int DigitsCount => _digits.Count;
    //остальные
    public int OthersCount => _others.Count;

    private void SetResults()
    {
        Сollating();

        var consonats = _letters.Except(_vowels);
        ConsonantsCount = consonats.Count();
    }

    private void Сollating()
    {
        for (int i = 0; i < _chars.Length; i++)
        {
            var currChar = _chars[i];

            if (Char.IsLetter(currChar))
            {
                _letters.Add(currChar);
            }
            else if (Char.IsDigit(currChar))
            {
                _digits.Add(currChar);
            }
            else if (Char.IsWhiteSpace(currChar))
            {
                //пробелы не учитываем
            }
            else
            {
                _others.Add(currChar);
            }
        }
    }

    internal string GetTotalResult()
    {
        var sb = new StringBuilder();

        sb.AppendLine($"Гласных: {VowelsCount}");
        sb.AppendLine($"Согласных: {ConsonantsCount}");
        sb.AppendLine($"Цифр: {DigitsCount}");
        sb.AppendLine($"Другие: {OthersCount}");

        return sb.ToString();
    }
}

Тогда код формы такой

public partial class FormMain : Form
{
    public FormMain()
    {
        InitializeComponent();

        _buttonRun.Click += ButtonRun_Click;
    }

    private void ButtonRun_Click(object sender, EventArgs e)
    {
        if (TryGetInputArray(_textBoxInput.Text, out char[] inputArray))
        {
            var ta = new TextAnalyzer(inputArray);
            _textBoxOutput.Text = ta.GetTotalResult();
        }
    }

    private bool TryGetInputArray(string text, out char[] inputArray)
    {
        var result = false;
        inputArray = null;

        var inputText = text.Trim();
        if (String.IsNullOrEmpty(inputText))
        {
            MessageBox.Show("Введите текст для анализа.", "Информация",
                MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
        else
        {
            result = true;
            inputArray = inputText.ToCharArray();
        }

        return result;
    }
}
→ Ссылка