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