Loading...
badbutcher avatar badbutcher 144 Точки

[Homework]Multidimensional Arrays, Sets, Dictionaries/ Problem 6. Count Symbols

Write a program that reads some text from the console and counts the occurrences of each character in it. Print the results in alphabetical (lexicographical) order.

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Problem_6.Count_Symbols
{
    class Program
    {
        static void Main(string[] args)
        {
            string words = Console.ReadLine();
            char[] arr = words.ToCharArray(); Array.Sort(arr);
            for (int i = 0; i < arr.Length; i++)
            {
                Console.WriteLine(arr[i]);
            }
        }
    }
}

Това е кода който съм измислил. Не мога да се сетя обаче как да преброя по колко символа има (ако изобщо може).

Някакви насоки ще са благодарни :)

Тагове:
1
C# Advanced
KatyaMarincheva avatar KatyaMarincheva 572 Точки
Best Answer

Здравей, Павел,

И твоето решение може да се продължи така, че да печата всеки символ по веднъж, и бройката му до него.

Това е пълният код: http://pastebin.com/RjBGzW40

Иначе идеята е да въртиш цикъла до arr.Length - 1,

да въведеш променлива int counter = 0; която на всяка итерация да се увеличава с 1;

и да не печаташ на всяко завъртане на цикъла, а само ако следващият символ е различен от текущия - тогава ще е краят на текущата поредица от еднакви символи, и ще отпечаташ текущия символ и текущата стойност на counter-a, a след отпечатването нулираш counter-a и започваш броенето отначало.

ЕДИТ: По особено е когато стигнеш до i = arr.Length - 2:

тогава печаташ Console.WriteLine("{0}: {1} time/s", arr[i + 1], ++counter); за да увеличиш на 1 counter-a преди да го отпечаташ.

 

0
19/09/2015 21:50:31
badbutcher avatar badbutcher 144 Точки

Много ясно описано.

Благодаря.

0
KatyaMarincheva avatar KatyaMarincheva 572 Точки

@badbutcher

Здравей пак,

Може да беше ясно описано, но бях бързала като го писах, в логиката имах пропуск и съответно излишен код.

Когато стигнем до i = arr.Length - 2 има действително две възможности, но няма нужда от допълнителни проверки, защото редът по-долу ги покрива и двете:

Console.WriteLine("{0}: {1} time/s", arr[i + 1], ++counter);

ако arr[i] != arr[i + 1], това значи, че arr[i] е било вече отпечатано в предния if, и сега остава да отпечатаме само една бройка от arr[i + 1]

ако обаче ако arr[i] == arr[i + 1], то в предния if arr[i] не е било отпечатано, ще го отпечатаме сега, но ще му прибавим плюс една бройка за arr[i + 1]

-1
Orhan avatar Orhan 12 Точки

Може със Dictionary<char,int> dict;
if(dict.ContainsKey(character))
dict[character]++;
else
dict.Add(character,1);

2
19/09/2015 17:39:59
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.