Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
strannikkk999
0 / 0 / 0
Регистрация: 11.10.2019
Сообщений: 4
1

Количество каждой буквы, по алфавиту

11.10.2019, 22:17. Просмотров 1016. Ответов 11

По данному слову, состоящему из строчных латинских букв, посчитайте количество каждой буквы.

Входные данные

На вход подается одна строка без пробелов, состоящая не более 1000 строчных латинских букв.

Выходные данные

Выведите на каждой строке в алфавитном порядке только те символы, которые встречаются в строке. Возле каждого символа выведите сколько раз встречается данный символ.

Sample Input:

beegeek
Sample Output:

b 1
e 4
g 1
k 1

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
using System;
 
public class MainClass
{
    public static void Main()
    {
        
        
        
        string s = Console.ReadLine();
        int n = s.Length;
        int count = 1;
        char a = '0';
        int i = 0;
        int j = 0;
        for (i = 0; i < n;i++)
        {
         if (s[i] != a) 
         {
              count = 1;
           for (j = i + 1; j < n;j++)
           {
              if (s[i] == s[j])
              {
              count++;  
              a = s[i];
              }               
           }
             
             Console.WriteLine(s[i] + " " + count);
          }
          else
          { 
               continue;
           }
        }
            
    }
}
Здравствуйте, написал код а он выдает числа и выдает их количество как нужно,но не в алфавитном порядке, необходимо что бы он это сделал, а не получается,помогите пожалуйста
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.10.2019, 22:17
Ответы с готовыми решениями:

Зашифровать текст путем сдвига каждой буквы на 2 буквы по алфавиту
Задан текст. Создать программу, которая зашифрует текст путем сдвига каждой буквы на 2 буквы по...

Подсчитать количество каждой буквы в тексте
Первые два сделал. Осталось подсчитать кол-во каждой буквы. Задание: Дан текстовый файл...

Определить количество встречаемости каждой буквы в тексте
Здравствуйте уважаемы форумчане. Попросили написать программу, которая считает количество...

Дана строка, содержащая цифры и строчные латинские буквы. Если буквы в строке упорядочены по алфавиту, то вывести 0; в п
Дана строка, содержащая цифры и строчные латинские буквы. Если буквы в строке упорядочены по...

Определить, упорядочены ли буквы по алфавиту
Помогите пожалуйста: Дан непустой текст из заглавных русских букв, за которым следует точка....

11
Diamante
1708 / 1310 / 767
Регистрация: 14.08.2016
Сообщений: 4,651
Завершенные тесты: 1
12.10.2019, 00:42 2
C#
1
2
3
4
5
6
            string s = Console.ReadLine();
            var result = s.GroupBy(x => x).OrderBy(x => x.Key);
            foreach (var item in result)
            {
                Console.WriteLine(item.Key + " = " + item.Count()); ;
            }
1
Элд Хасп
Модератор
3540 / 2550 / 835
Регистрация: 21.04.2018
Сообщений: 8,077
Записей в блоге: 2
12.10.2019, 05:31 3
strannikkk999, ну так надо добавить сортировку символов.

Проще всего сделать с использованием методов расширения LINQ, как показалDiamante.

Если по условию задания надо делать через явные циклы, то сначала отсортируйте символы строки.
C#
10
11
char[] s = Console.ReadLine().ToCharArray();
Array. Sort (s);
После сортировки получаете дополнительное преимущество.
Одинаковые символы идут подряд, поэтому посчитать их количество можно одним циклом.
C#
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
        int count = 0;
        char a = s[0];
 
        for (int i = 1; i <=n;i++)
        {
             count ++; 
             if (i == n || s[i] != a) 
            {
                Console.WriteLine($"{a} {count}");
                  if (i != n)
                   {
                         a = s[i];
                         count = 0;
                     }
              }
         }
     Console. Read Key ();
1
QuestionAnd
40 / 30 / 12
Регистрация: 12.08.2019
Сообщений: 112
12.10.2019, 06:08 4
Лучший ответ Сообщение было отмечено strannikkk999 как решение

Решение

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    static void Main(string[] args)
        {
            int len = 'z' - 'a';
            string s = Console.ReadLine();
            var arr = new int[len];
 
            foreach (char ch in s)
            {
                arr[ch - 'a']++;
            }
 
            for (int i = 0; i < len; i++)
            {
                if(arr[i]!= 0)
                Console.WriteLine($"{(char)('a'+ i)} {arr[i]}");
            }                     
        }
1
12.10.2019, 06:08
amr-now
Эксперт JS
2312 / 1324 / 627
Регистрация: 14.06.2018
Сообщений: 3,175
12.10.2019, 08:33 5
Группировка букв с помощью словаря:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
using System;
using System.Collections.Generic;
 
namespace Question2511789
{
    class Program
    {
        static void Main(string[] args)
        {
            // Упрощенная версия группировки просто для количеств в группе
            Dictionary<char, int> GroupBy(char[] arr)
            {
                var dict = new Dictionary<char, int>();
                foreach (var key in arr)
                {
                    dict[key] = dict.ContainsKey(key) ? dict[key] + 1 : 1;
                }
                return dict;
            }
 
            // string s = "beegeek";
            string s = Console.ReadLine();
            var array = s.ToCharArray();
            Array.Sort(array);
            var result = GroupBy(array);
 
            foreach (var item in result)
            {
                Console.WriteLine(item.Key + " " + item.Value); ;
            }
        }
    }
}
Добавлено через 4 минуты
Или даже два в одном флаконе:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
using System;
using System.Collections.Generic;
 
namespace Question2511789
{
    class Program
    {
        static void Main(string[] args)
        {
            // Упрощенная версия группировки просто для количеств в группе
            SortedDictionary<char, int> GroupBy(string str)
            {
                var dict = new SortedDictionary<char, int>();
                foreach (var key in str)
                {
                    dict[key] = dict.ContainsKey(key) ? dict[key] + 1 : 1;
                }
                return dict;
            }
 
            // string s = "beegeek";
            string s = Console.ReadLine();
 
            var result = GroupBy(s);
 
            foreach (var item in result)
            {
                Console.WriteLine(item.Key + " " + item.Value); ;
            }
        }
    }
}
Но данные варианты для ситуации, если прошли дженерики и не дошли до LINQ
0
QuestionAnd
40 / 30 / 12
Регистрация: 12.08.2019
Сообщений: 112
12.10.2019, 10:11 6
Цитата Сообщение от amr-now Посмотреть сообщение
dict.ContainsKey(
он жа медленный
0
Элд Хасп
Модератор
3540 / 2550 / 835
Регистрация: 21.04.2018
Сообщений: 8,077
Записей в блоге: 2
12.10.2019, 10:16 7
QuestionAnd, медленнее чем индекс, но быстрее чем поиск.
Несколько сот миллионов в секунду обработать может.
0
QuestionAnd
40 / 30 / 12
Регистрация: 12.08.2019
Сообщений: 112
12.10.2019, 10:49 8
если и дженерики не прошли
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
using System;
using System.Collections;
 
namespace ConsoleApp
{
    public class ParodyOfDictionary
    {
        static void Main()
        {
            var s = Console.ReadLine();
 
            var dict = new ParodyOfDictionary();
 
            foreach (char ch in s)
            {
                dict.Insert(ch);
            }
 
            foreach (var item in dict)
            {
                 Console.WriteLine(item);
            }
        }
      
            public IEnumerator GetEnumerator()
            {
                Item current = Head;
                while (current != null)
                {
                    yield return current;
                    current = current.Next;
                }
            }
 
            public void Insert(char v)
            {
                Head = Insert(Head, v);
            }
 
            Item Insert(Item head, char key)
            {
                var newItem = new Item(key, 1);
                if (head == null)
                    return newItem;
                else
                {
                    if (head.Key == key)
                        head.Value++;
                    else if (head.Key < key)
                        head.Next = Insert(head.Next, key);
                    else
                    {
                        newItem.Next = head;
                        head = newItem;
                    }
                }
                return head;
            }
            public Item Head { get; set; }
 
        }
 
        public class Item
        {
            public char Key { get; set; }
            public int Value { get; set; }
            public Item Next { get; set; }
 
            public Item(char key, int value)
            {
                this.Key = key;
                this.Value = value;
            }
 
            public override string ToString()
            {
                return $"{Key} {Value}";
            }
        }
Добавлено через 5 минут
Элд Хасп,
не, я про TryGetValue
https://stackoverflow.com/questions/...ontainskeyitem

Добавлено через 22 минуты

Не по теме:

Цитата Сообщение от Элд Хасп Посмотреть сообщение
медленнее чем индекс, но быстрее чем поиск.
Несколько сот миллионов в секунду обработать может.
та я в ни в Вас, ни в amr-now нисколько не сомневаюсь. )
Увидел что amr-now зашел в C# для начинающих, вот и обрадовался ..

0
Элд Хасп
Модератор
3540 / 2550 / 835
Регистрация: 21.04.2018
Сообщений: 8,077
Записей в блоге: 2
12.10.2019, 11:20 9
QuestionAnd, причём здесь сомнения?
Это просто обмен знаниями.
Всё ок.

Добавлено через 5 минут
QuestionAnd, без разницы ContainsKey, TryGetValue - оба метода очень быстрые.
Может при обработки миллиардов записей разница между ними и станет значимой, но, по-моему, заморачиваться этим не стоит.
Использовать, то что удобно.
2
strannikkk999
0 / 0 / 0
Регистрация: 11.10.2019
Сообщений: 4
12.10.2019, 21:42  [ТС] 10
Всем огромное спасибо, вы мне очень помогли, и многое прояснили
0
Diamante
1708 / 1310 / 767
Регистрация: 14.08.2016
Сообщений: 4,651
Завершенные тесты: 1
13.10.2019, 00:39 11
QuestionAnd, а разве есть проблема в производительности? код, в первую очередь, должен быть понятен ВСЕМ, включая того, кто его написал, но через год...если замеры производительности показали затык именно тут, тогда да - нужно что-то делать, но пока такой проблемы нет - писать !НАДО! лаконично, просто и понятно ВСЕМ!
0
QuestionAnd
40 / 30 / 12
Регистрация: 12.08.2019
Сообщений: 112
13.10.2019, 00:43 12
Цитата Сообщение от Diamante Посмотреть сообщение
а разве есть проблема в производительности?
нет там никакой проблемы
Цитата Сообщение от Diamante Посмотреть сообщение
лаконично, просто и понятно ВСЕМ!
только за
0
13.10.2019, 00:43
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.10.2019, 00:43

Проверить, упорядочены ли строчные буквы по алфавиту
Дан текст, состоящий из прописных и строчных букв. Проверить, упорядочены ли строчные буквы по...

Замена буквы в TextBox на следующую по алфавиту
Добрый день, вобщем такая задача, три поля техт бокс, в одном то что мы печатаем на клавиатуре, в...

Напечатать слова, у которых буквы упорядочены по алфавиту
Всем доброго времени суток, помогите пожалуйста закодить прогу. У меня задание: Дана строка,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.