Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/18: Рейтинг темы: голосов - 18, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 27.10.2017
Сообщений: 15

Количество различных символов

18.11.2019, 16:56. Показов 3991. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, как можно найти количество различных символов в строке. Сделал только используя Distinct.
C#
1
2
3
            string s = Console.ReadLine();
            var q = s.Distinct();             
            Console.WriteLine("Различных букв \n{0}", q.Count());
Как сделать это не используя при этом лямбда-выражения, foreach и собственно Distinct? Заранее спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.11.2019, 16:56
Ответы с готовыми решениями:

Подсчитать количество различных символов
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace stroka { class Program ...

Задача на строки. Подсчитать количество различных символов
Составить программу, которая будет вводить строку в переменную string. Подсчитать, сколько различных символов встречаются в ней. Вывести их...

Вывести на экран красным цветом ту строку, где максимальное количество попарно различных символов
Вывести на экран красным цветом ту строку, где максимальное количество попарно различных символов.

18
 Аватар для Enifan
1849 / 1191 / 501
Регистрация: 14.10.2018
Сообщений: 3,211
18.11.2019, 17:05
x-total, Способов много, но ваш думаю проще и быстрее всего.
Символа что не было - записывается в список. В конце получаем кол-во разных символов
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
using System;
using System.Collections.Generic;
 
class Program
{
    static void Main()
    {
        string str = Console.ReadLine();
        List<char> list = new List<char>();
        for (int i = 0; i < str.Length; i++)
        {
            if (CheckSymbol(list, str[i]))
                list.Add(str[i]);
        }
        Console.WriteLine($"Различных символов: {list.Count}");
 
        Console.ReadKey();
    }
 
    // true - символа не было, false - символ уже был
    static bool CheckSymbol(List<char> list, char symbol)
    {
        for (int i = 0; i < list.Count; i++)
        {
            if (list[i] == symbol)
                return false;
        }
        return true;
    }
}
0
315 / 244 / 149
Регистрация: 03.10.2017
Сообщений: 886
Записей в блоге: 1
18.11.2019, 17:22
Enifan, зачем вы используете лист и не используете Contains?
Тогда уж на массивах бы писали
0
0 / 0 / 0
Регистрация: 27.10.2017
Сообщений: 15
18.11.2019, 17:31  [ТС]
Masson1848, я метод Contains тоже использовал. Как сделать это максимально примитивно?
0
315 / 244 / 149
Регистрация: 03.10.2017
Сообщений: 886
Записей в блоге: 1
18.11.2019, 17:37
x-total, Что для вас максимально примитивно?
0
0 / 0 / 0
Регистрация: 27.10.2017
Сообщений: 15
18.11.2019, 17:47  [ТС]
Masson1848, ну допустим с циклами или с массивом опять же.

Добавлено через 4 минуты
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Console.WriteLine("Введите строку:");
 
            string s = Console.ReadLine();
 
            int  count= 0;
            for (int i = 0; i < s.Length; ++i)
            {
                for (int j = 0; j < s.Length; ++j)
                {
                    if (s[i] == s[j])
                    {
                        
                        count++;
                        break;
                    }
                  
                    
                }
            }
        
            Console.WriteLine(count);
Вот но получилось только все символы считать
0
315 / 244 / 149
Регистрация: 03.10.2017
Сообщений: 886
Записей в блоге: 1
18.11.2019, 17:52
x-total, Можно такк
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
 
namespace Test
{
 
    class Program
    {
 
        private static void Main(string[] args)
        {
            string str = "123456789012548562248525848610461";
            int count = 0;
 
            for (int i = 0; i < str.Length; i++)
            {
                int j = i - 1;
                while (j >= 0 && str[j] != str[i])
                {
                    j--;
                }
 
                if (j == -1)
                {
                    count++;
                }
            }
            Console.WriteLine(count);
            Console.ReadLine();
        }
 
    }
 
}
Добавлено через 1 минуту
x-total, Вы читать пробовали что вы написали? у вас всегда j начинается с 0 и она всегда дойдёт до i и они всегда будут равны
1
0 / 0 / 0
Регистрация: 27.10.2017
Сообщений: 15
18.11.2019, 17:56  [ТС]
Masson1848, Спасибо, а можете пояснить код?
0
315 / 244 / 149
Регистрация: 03.10.2017
Сообщений: 886
Записей в блоге: 1
18.11.2019, 17:59
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
 
namespace Test
{
 
    class Program
    {
 
        private static void Main(string[] args)
        {
            string str = "123456789012548562248525848610461"; //строка
            int count = 0;//количество символов
 
            for (int i = 0; i < str.Length; i++) //пока не достигнем конца строки
            {
                int j = i - 1;
                // проверяем, был ли текущий символ до этого
                while (j >= 0 && str[j] != str[i]) //пока j >=0 и пока не нашли похожий символ
                {
                    j--;
                }
 
                if (j == -1) //если j==-1 значит такого символова раньше не было, увеличиваем счётчик
                {
                    count++;
                }
            }
            Console.WriteLine(count);
            Console.ReadLine();
        }
 
    }
 
}
1
 Аватар для Enifan
1849 / 1191 / 501
Регистрация: 14.10.2018
Сообщений: 3,211
18.11.2019, 17:59
Цитата Сообщение от Masson1848 Посмотреть сообщение
зачем вы используете лист и не используете Contains?
В задании было не использовать лямбда-выражения, foreach и собственно Distinct. Все условия соблюдены. Я конечно все понимаю, но гадать не хочу, что можно а что нельзя.
x-total, На будущее уточняйте как именно нужно реализовывать, так как способов может быть много.
Самый примитивный способ
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
using System;
 
class Program
{
    static void Main()
    {
        string str = Console.ReadLine();
        char[] arr = new char[0];
 
        for (int i = 0; i < str.Length; i++)
        {
            if (CheckSymbol(arr, str[i]))
                arr = AddSymbol(arr, str[i]);
        }
        Console.WriteLine($"Различных символов: {arr.Length}");
 
        Console.ReadKey();
    }
 
    // true - символа не было, false - символ был
    static bool CheckSymbol(char[] arr, char symbol)
    {
        for (int i = 0; i < arr.Length; i++)
        {
            if (arr[i] == symbol)
                return false;
        }
        return true;
    }
 
    static char[] AddSymbol(char[] arr, char symbol)
    {
        char[] newArr = new char[arr.Length + 1];
        int i;
        for (i = 0; i < arr.Length; i++)
            newArr[i] = arr[i];
        newArr[i] = symbol;
        return newArr;
    }
}
0
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
18.11.2019, 20:21
вот так проще и быстрее
C#
1
2
3
        string str = Console.ReadLine();
        var hs = new HashSet<char>(str);
        Console.WriteLine(hs.Count);
1
 Аватар для jester
352 / 247 / 76
Регистрация: 18.03.2016
Сообщений: 979
18.11.2019, 20:30
вот так вроде тоже можно
C#
1
2
3
4
5
6
7
8
9
10
11
12
    static void Main()
    {
        string str = Console.ReadLine();
        bool[] arr = new bool[0xFFFF + 1];
 
        for (int i = 0; i < str.Length; i++)
             arr[str[i]] = true; 
        
        Console.WriteLine($"Различных символов: {arr.Count(x => x)}");
 
        Console.ReadKey();
    }
0
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
19.11.2019, 00:48
jester, можно, задачу решает, но
Цитата Сообщение от x-total Посмотреть сообщение
не используя при этом лямбда-выражения
0
 Аватар для jester
352 / 247 / 76
Регистрация: 18.03.2016
Сообщений: 979
19.11.2019, 01:22
Diamante, это важно
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    static void Main()
    {
        string str = Console.ReadLine();
        bool[] arr = new bool[0xFFFF + 1];
 
int count = 0;
for (int i = 0; i < str.Length; i++)
{
   if(arr[str[i]]==false) 
      count++;
   arr[str[i]] = true; 
}
        
        Console.WriteLine($"Различных символов: {count}");
 
        Console.ReadKey();
    }
0
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
19.11.2019, 01:58
jester, relax, это не я придумал, это задание такой!а хешсет, вряд ли обогнать плучиццо
0
14 / 11 / 3
Регистрация: 16.10.2019
Сообщений: 95
19.11.2019, 02:21
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 string str2 = "";
            int inc = 0;
            string str1 = "Приветтее";
            for (int i = 0; i < str1.Length; i++)
            {
                if (!str2.Contains(str1[i]))
                {
                    str2 += str1[i];
                    inc++;
                }
            }
            Console.WriteLine(str1);
            Console.WriteLine(str2);
 
            Console.WriteLine($"Различных символов = " + inc);
            Console.ReadKey(true);
 
        }
Мне так проще.
0
 Аватар для jester
352 / 247 / 76
Регистрация: 18.03.2016
Сообщений: 979
19.11.2019, 03:41
Diamante, )) там foreach под запретом хешсет тем более.
и почему обогнать не получится?
0
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
19.11.2019, 08:24
jester, про хешсет в задании ни слова, а не обогнать - работа хешсет идет за О(1)
0
 Аватар для jester
352 / 247 / 76
Регистрация: 18.03.2016
Сообщений: 979
19.11.2019, 13:05
Diamante, а у меня? Чьё О(1) быстрее?)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.11.2019, 13:05
Помогаю со студенческими работами здесь

Дана строка, состоящая из N попарно различных символов. Вывести все перестановки символов данной строки
Здравствуйте. Дана строка, состоящая из M попарно различных символов. Вывести все перестановки символов данной строки. Сделать нужно...

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

Определить количество различных символов и сколько раз каждый из этих символов встречается в строке
Здравствуйте. Есть вот такая задача: &quot;Составить программу, которая принимает строку символов, определяет, сколько в ней различных...

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

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


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru