Написать программу которая выводит на экран символы, которые наиболее часто встречается в строке - C#

Узнай цену своей работы

Формулировка задачи:

I. Разработать программу, которая для заданной строки s:

Замечание. При решении задач использовать тип string.

3. выводит на экран символы, которые наиболее часто встречается в строке; Поскольку пока мы "знаем" только тип string и

не знаем

списки, я никак не могу придумать более-менее нормальный алгоритм для этого случая. Проблемы начинаются, когда искомых символов больше одного.

Как сделать так, чтобы программа только один раз выводила этот символ?

// Разработать программу, которая для заданной строки s:
// Замечание. При решении задач использовать тип string.
// 1.1 подсчитывает общее число вхождений символов х и y;
// 1.2 определяет, какой из двух заданных символов встречается чаще в строке;
// 1.3 выводит на экран символы, которые наиболее часто встречается в строке;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication56
{
    class Program
    {
        static int CountChar(char chr, String a)
        {
            int i, count = 0;
            for (i = 0; i < a.Length; i++)
            {
                if (a[i] == chr)
                {
                    count++;
                }
            }
            Console.WriteLine("Cимвол '{0}' встречается {1} раз(а)", chr, count);
            return count;
 
        }
 
        static void FindMostOften(String a) // 1.3 выводит на экран символы, которые наиболее часто встречается в строке;
        {
            // Инициализируем двумерный массив для хранения информации о количестве символов в исходном массиве. Его размер будет не больше размера исходного массива
            int[,] cc = new int[a.Length, 2]; // Первый элемент - это символ, второй - количество его вхождений
            int[] maxcc = new int[a.Length];
            int i = 0;
            int count = 0, maxcount = 0;
            for (i = 0; i < a.Length; i++)
            {
                cc[i, 0] = Convert.ToInt16(a[i]);
                cc[i, 1] = 1;
            }
 
            // Ищем символ и отмечаем количество его вхождений 
            // (лучше использовать списки, но их мы пока "не знаем")
            for (i = 0; i < a.Length; i++)
            {
                count = CountChar(a[i], a);
                cc[i, 1] = count;
                if (maxcount < count)
                {
                    maxcount = count;
                }
            }
 
            // Если символ найден, меняем количество его вхождений на 0, чтобы он больше не участвовал в поиске
            for (i = 0; i < a.Length; i++)
            {
                if (cc[i, 1] == maxcount)
                {
                    maxcc[i] = 0;
                }
            }

            // Теперь нужно выводить все символы, которые встречаются maxcount количество раз
            Console.WriteLine("Чаще всего встречается символ ");
            for (i = 0; i < a.Length; i++)
            {
                if (cc[i, 1] == maxcount)
                {
                    Console.Write("{0}  ({1} раз(а))\n", (char)cc[i, 0], cc[i, 1]);
                }
            }
 
        }
 
        static void Main(string[] args)
        {
            String s = "кол околллло колокола";
            Console.WriteLine("Строка: {0}", s);
 
            // 1.1 подсчитывает общее число вхождений символов х и y;
            char x = 'к';
            char y = 'о';
            int count_x = 0;
            int count_y = 0;
            count_x = CountChar(x, s);
            count_y = CountChar(y, s);
 
            // 1.2 определяет, какой из двух заданных символов встречается чаще в строке;
            if (count_x > count_y)
            {
                Console.WriteLine("Символ {0} встречается чаще", x);
            }
            else if (count_x < count_y)
            {
                Console.WriteLine("Символ {0} встречается чаще", y);
            }
            else if (count_x == 0)
            {
                Console.WriteLine("Символы {0} и {1} отсутствуют", x, y);
            }
            else
            {
                Console.WriteLine("Символы {0} и {1} встречается одинаковое количество раз", x, y);
            }
 
            // 1.3  выводит на экран символы, которые наиболее часто встречается в строке;
            FindMostOften(s);
            Console.WriteLine("Исходная строка: {0}", s);
            Console.ReadKey();
 
        }
    }
}

Решение задачи: «Написать программу которая выводит на экран символы, которые наиболее часто встречается в строке»

textual
Листинг программы
// Разработать программу, которая для заданной строки s:
// Замечание. При решении задач использовать тип string.
// 1.1 подсчитывает общее число вхождений символов х и y;
// 1.2 определяет, какой из двух заданных символов встречается чаще в строке;
// 1.3 выводит на экран символы, которые наиболее часто встречается в строке;
// 1.4 выводит на экран символы, которые встречаются в строке только один раз;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication56
{
    class Program
    {
        static int CountChar(char chr, String a)
        {
            int i, count = 0;
            for (i = 0; i < a.Length; i++)
            {
                if (a[i] == chr)
                {
                    count++;
                }
            }
            Console.WriteLine("Cимвол '{0}' встречается {1} раз(а)", chr, count);
            return count;
 
        }
 
        static void FindMostOften(String a) // 1.3 выводит на экран символы, которые наиболее часто встречается в строке;
        {
            // Инициализируем двумерный массив для хранения информации о количестве символов в исходном массиве. Его размер будет не больше размера исходного массива
            Console.WriteLine("\n1.3  выводит на экран символы, которые наиболее часто встречается в строке:");
            int[] cc = new int[65535]; // Индекс - это символ, элемент - количество его вхождений
            int i = 0, count = 0, maxcount = 0;
 
            // Обнуляем массив
            for (i = 0; i < 65535; i++)
            {
                cc[i] = 0;
            }
 
            // Заполняем массив данными из заданной строки
            for (i = 0; i < a.Length; i++)
            {
                Console.Write("{0}", a[i]);
                cc[Convert.ToInt16(a[i])]++;
            }
 
            // Ищем символ и отмечаем максимальное количество его вхождений 
            for (i = 0; i < 65535; i++)
            {
                count = cc[i];
                if (maxcount < count)
                {
                    maxcount = count;
                }
            }
 
            Console.WriteLine("\nmaxcount: {0}", maxcount);
 
            // Теперь нужно выводить все символы, которые встречаются maxcount количество раз
            if (maxcount <= 0)
            {
                Console.WriteLine("Символы не найдены");
            }
            else
            {
 
                Console.WriteLine("Чаще всего встречаются символы:");
                for (i = 0; i < 65535; i++)
                {
                    if (cc[i] == maxcount)
                    {
                        Console.WriteLine("'{0}'", Convert.ToChar(i));
                    }
                }
            }
        }
 
        // 1.4 выводит на экран символы, которые встречаются в строке только один раз;
        static void FindOnlyOnce (String a) 
        {
            Console.WriteLine("\n1.4 выводим на экран символы, которые встречаются в строке только один раз:");
            int i;
            bool isOnly = false;
            
            // Выводим строку с индексами символов:
            for (i = 0; i < a.Length; i++)
            {
                Console.WriteLine("[{0,2}] {1}", i, a[i]);
            }
 
            // Ищем символы в единственном экземпляре
            for (i = 0; i < a.Length; i++)
            {
                if (a.IndexOf(a[i]) == a.LastIndexOf(a[i])) // если этот символ больше не встречается
                    {
                    Console.WriteLine("Символ '{1}' на позиции = {0} встречается только один раз", i, a[i]);
                    isOnly = true;
                    }
            }
 
            if (!isOnly)
                {
                    Console.WriteLine("Уникальных символов в данной строке нет");
                }
 
        }
 
        static void Main(string[] args)
        {
            String s = "кол околллло колокола щ";
            Console.WriteLine("Исходная cтрока: {0}", s);
 
            // 1.1 подсчитывает общее число вхождений символов х и y;
            char x = 'к';
            char y = 'о';
 
            Console.WriteLine("\n1.1 подсчитывает общее число вхождений символов х = '{0}' и y = '{1}':", x, y);
            int count_x = 0;
            int count_y = 0;
            count_x = CountChar(x, s);
            count_y = CountChar(y, s);
 
            // 1.2 определяет, какой из двух заданных символов встречается чаще в строке;
            Console.WriteLine("\n1.2 определяет, какой из двух заданных символов встречается чаще в строке:");
            if (count_x > count_y)
            {
                Console.WriteLine("Символ '{0}' встречается чаще", x);
            }
            else if (count_x < count_y)
            {
                Console.WriteLine("Символ '{0}' встречается чаще", y);
            }
            else if (count_x == 0)
            {
                Console.WriteLine("Символы '{0}' и '{1}' отсутствуют", x, y);
            }
            else
            {
                Console.WriteLine("Символы '{0}' и '{1}' встречается одинаковое количество раз", x, y);
            }
 
            // 1.3  выводит на экран символы, которые наиболее часто встречается в строке;
            FindMostOften(s);
 
            // 1.4 выводит на экран символы, которые встречаются в строке только один раз;
            //s = "кол";
            FindOnlyOnce(s);
 
            Console.ReadKey();
 
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.778 из 5
Похожие ответы