Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.01.2016, 23:22   #1
Bergamot
Пользователь
 
Регистрация: 06.01.2016
Сообщений: 18
По умолчанию Строки.Подсчитать, сколько различных символов встречаются в ней.

Код:
Console.WriteLine("Введите строку:");
            string c =Console.ReadLine();
            c.Trim();
            int b=0;
           
            char[] ch = c.ToCharArray();
           
            for (int i = 0; i < ch.Length; i++)
            {
                for (int j = 0; j < ch.Length; j++)
                {
 
                    if (ch[i] != ch[j])
                        b++;
                    Console.Write("{0}", ch[i] + " ");
                }
                
                       
               
            }
            Console.WriteLine("Различных символов = {0}",k);
            
 
           
                Console.ReadLine();
Подскажите,почему оно удваивает количество символов.
Например:ДП...
Выскакивает:Д Д П П (2 различных символа)
А если написать:Хмель,то
Х Х Х Х Х м м м м м е е е е е л л л л л ь ь ь ь ь (Различных символов:20),а должен быть ответ 5.
Какая ошибка в коде?

Последний раз редактировалось Bergamot; 06.01.2016 в 23:26.
Bergamot вне форума Ответить с цитированием
Старый 07.01.2016, 00:02   #2
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

Потому что компьютер делает то, что вы ему указываете, а не то, что вы хотите.

Алгоритм решения задачи неверный. Не надо каждый символ с каждым сравнивать.
Заведите отдельный список, в который будете помещать "уникальные" символы, пробегитесь по массиву ch, и на каждой итерации проверяйте, есть ли текущий символ в списке уникальных. Если его там нет - добавляйте его туда. После цикла выведите содержимое списка уникальных символов и его длину.

p.s. если не очень умеете в C#, то подсказываю: для списка используйте
Код:
List<char> symbols = new List<char>();
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Старый 07.01.2016, 04:37   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

как вариант
Код:
str.Distinct().ToList()
даст список уникальный символов.
если Linq можно.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 07.01.2016, 11:06   #4
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
как вариант
Код:
str.Distinct().ToList()
даст список уникальный символов.
если Linq можно.
Вот так красивая "функциональщина" и портит зачатки алгоритмического мышления у начинающих.

Все-таки C# без наложения определенных ограничений — не самый хороший язык для обучения )
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Старый 07.01.2016, 17:16   #5
Bergamot
Пользователь
 
Регистрация: 06.01.2016
Сообщений: 18
По умолчанию

Цитата:
Сообщение от Luuzuk Посмотреть сообщение
Вот так красивая "функциональщина" и портит зачатки алгоритмического мышления у начинающих.

Все-таки C# без наложения определенных ограничений — не самый хороший язык для обучения )
Я переделал,оно теперь выводит буквы без повторений,но как сделать так,чтобы оно мне еще и вывело цифрой...
Код:
Console.WriteLine("Введите строку: ");
            string str = Console.ReadLine();

            var символ =
            from s in str.ToCharArray()
            where (s != ' ')
            group s by s into группа //
            select группа.First();

            foreach (var ch in символ)
            {
                Console.WriteLine(ch);
            }

            Console.WriteLine("Количество различных символов = ");
            {
                Console.ReadKey();
Чтобы оно мне вывело цифрой количество различных символов,например:Хмель.
Количество различных символов 5...

Последний раз редактировалось Bergamot; 07.01.2016 в 17:25.
Bergamot вне форума Ответить с цитированием
Старый 08.01.2016, 02:58   #6
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

"символ.Count()" вернет вам количество
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дана строка символов до точки. Определить, сколько каких латинских букв в ней содержится vladden123 Помощь студентам 5 07.01.2015 06:34
Строки. Дана строка символов,среди которых есть двоеточие ( : ). Определить сколько символов ему предшествуют. Un1q Паскаль, Turbo Pascal, PascalABC.NET 2 11.12.2013 14:52
Дана строка символов. Подсчитать, сколько различных символов встречаются в ней. Вывести их на экран Алена_=))) Microsoft Office Word 1 17.06.2012 21:04
Из заданной символьной строки, выбрать те символы, которые встречаются в ней только один раз... Banny Паскаль, Turbo Pascal, PascalABC.NET 3 19.12.2008 06:15