Написать программу которая выводит на экран символы, которые наиболее часто встречается в строке - 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(); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д