Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 95, средняя оценка - 4.89
Опа!!
15 / 15 / 0
Регистрация: 30.09.2009
Сообщений: 89
#1

Множества set, проверка принадлежности множеству - C++

15.04.2011, 12:28. Просмотров 13828. Ответов 17
Метки нет (Все метки)

Доброго времени суток, ув. форумчане Для лабораторной работы необходимо реализовать множество и выполнять проверку принадлежности какого-либо элемента заданному множеству. Нашел вариант задания через ассоциативный контейнер set, да вот не работал никогда с подобным, по сему возникли вопросы.

Вообще, лабораторная работа посвящена реализации конечного автомата, который в свою очередь играет роль лексического аналазитора (выделяет из кода на языке ЯВУ лексемы). Так вот, я открываю файл с исх. кодов, забираю оттуда первый (второй, третий и т.д.) символ, теперь мне необходимо определить, является ли этот символ буквой, цифрой или разделителем. Придумал разве что вариант с заданием каким-либо отдельно множеств букв и цифр и проверки а-ля паскаль или SQL "IN".

Примерно так, видимо, стоит задать множество букв:
C++
1
2
3
4
5
const int max_nums = 5;
char nums[max_nums] = {'a', 'b', 'c', 'd', 'e'};
 
set<char> Letters;
for( int i = 0; i < max_nums; ++i ) Letters.insert(nums[i]);
Как выполнить проверку на принадлежность элемента этому множеству? Может, стоит попробовать другие варианты? enum не предоставляет средств проверки принадлежности, по массиву бегать тоже не хочется.. посоветуйте оптимальный вариант Может, есть какие-либо ф-ии библиотеки для проверки на цифру, букву и т.д.?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.04.2011, 12:28
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Множества set, проверка принадлежности множеству (C++):

Построение функции принадлежности нечеткого множества - C++
Всем привет =))) Столкнулся с такой задачей: написать программу построения графика функции принадлежности нечеткого множества. У меня...

Проверка принадлежности - C++
Даны два действительных числа x и y. Проверьте, принадлежит ли точка с координатами (x, y) заштрихованному квадрату (включая его границу)....

Проверка принадлежности точки определенной плоскости - C++
Никак не дойдет алгоритм решения задачи -.- Помогите.

Проверка принадлежности к классу - C++
В Java есть ф-я instanceof. Есть ли подобная в С++?

Использование множества set - C++
Задача состоит в следующем: необходимо заполнить массив числами от 1 до 49 случайным образом так, чтобы числа не повторялись. Идея состояла...

Множества. Проверка множества на наличие элемента в нем - C++
Во многих задачах сталкиваюсь с одной и той же проблемой: Нужно создать множество элементов, добавлять в него новые элементы и проверять...

17
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
15.04.2011, 12:36 #2
А чем стандартные функции для проверки не нравяцца?
isalnum
isalpha
iscntrl
isdigit
isgraph
islower
isprint
ispunct
isspace
isupper
isxdigit
2
Опа!!
15 / 15 / 0
Регистрация: 30.09.2009
Сообщений: 89
15.04.2011, 12:42  [ТС] #3
Спасибо, и все-таки они существуют, я так и знал)) сразу упрощает все и не надо задавать множества и что-то там проверять!
0
neske
1503 / 870 / 84
Регистрация: 26.03.2010
Сообщений: 2,985
15.04.2011, 13:28 #4
http://www.cplusplus.com/reference/clibrary/cctype/
2
Zerstroer
0 / 0 / 0
Регистрация: 15.02.2011
Сообщений: 7
20.02.2012, 11:42 #5
Столкнулся с аналогичной ситуацией, только вместо банальной строки у меня в множестве объекты. Как быть в такой ситуации?
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
20.02.2012, 11:48 #6
Цитата Сообщение от Zerstroer Посмотреть сообщение
Как быть в такой ситуации?
Создать множество возможных типов объектов и потом искать в множестве/множествах.
А вообще, твой вопрос похож на этот:
Я написал "Hello world!", вроде работает. Как теперь её переделать в СУБД с поддержкой TSQL?
2
Zerstroer
0 / 0 / 0
Регистрация: 15.02.2011
Сообщений: 7
20.02.2012, 12:11 #7
Спасет ли find в данной ситуации отца русской демократии?
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
20.02.2012, 12:27 #8
Zerstroer, По идее вполне.
0
Zerstroer
0 / 0 / 0
Регистрация: 15.02.2011
Сообщений: 7
20.02.2012, 12:30 #9
Deviaphan, вообще-то ситуация будто бы и простая.
Есть контейнер set<MyClass> my_set с конечным числом объектов.
В программе мне нужно выявлять принадлежность объекта obj1 к my_set. Ищу наиболее простой способ это осуществить.
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
20.02.2012, 12:30 #10
Цитата Сообщение от ForEveR Посмотреть сообщение
А есть другие варианты?
Разумеется есть. Можно тип объекта хранить в самом объекте. Это ещё и самый эффективный и экономный способ. Если есть возможность добавить к объекту функцию GetType().
0
Zerstroer
0 / 0 / 0
Регистрация: 15.02.2011
Сообщений: 7
20.02.2012, 12:30 #11
Deviaphan, вообще-то ситуация будто бы и простая.
Есть контейнер set<MyClass> my_set с конечным числом объектов.
В программе мне нужно выявлять принадлежность объекта obj1 к my_set. Ищу наиболее простой способ это осуществить.
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
20.02.2012, 12:32 #12
Цитата Сообщение от Zerstroer Посмотреть сообщение
принадлежность объекта obj1 к my_set
В таких условиях исключительно my_set.find(...);
Но "самоопределение" типа может быть более хорошим вариантом.
0
Zerstroer
0 / 0 / 0
Регистрация: 15.02.2011
Сообщений: 7
20.02.2012, 12:39 #13
GetType() - для чего?
Меня не интересует содержимое объекта. Меня интересует только принадлежность его к определенной фиксированной группе объектов и всё. Решение, предложенное для Опы - меня не устраивает, так как Опа в множестве хранил примитивные типы.
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
20.02.2012, 12:44 #14
Цитата Сообщение от Zerstroer Посмотреть сообщение
для чего?
оК. Не GetType, а GetGroup. Т.е. объект может хранить в себе признак группы. Конечно, если один объект не может принадлежать нескольким группам.
У тебя всего два варианта, либо использовать множество объектов и проверять принадлежность этому множеству (не обязательно set, это может быть и Vector и хоть что), либо объект сам знает, к какому множеству он принадлежит и у него можно узнавать, а не принадлежит ли он этому множеству.
Первый способ подходит для любых объектов, даже если их код тебе не доступен. Второй способ более эффективный и по памяти и по скорости.
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
20.02.2012, 13:05 #15
Deviaphan, Вообщем-то извращение при использовании std::set.
0
20.02.2012, 13:05
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.02.2012, 13:05
Привет! Вот еще темы с ответами:

Как очистить содержимое множества set? - C++
после добавления множества в вектор нужно очистить множество для повторной записи туда set&lt;string&gt; str; как это сделать с помощью clear()...

Как получить доступ к объектам set-множества? (STL) - C++
Помогите, пожалуйста: запихал в контейнер set объекты класса, а как потом получить доступ к определенному полю объекта в контейнере - не...

Проверка множества на антисимметричность - C++
Напишите пожалуйста программу которая проверяет антисимметричность множества. Заранее спасибо.

Проверка на включение, множества - C++
Есть двусвязный список в котором объявляем 2 множества, и нужно организовать проверку на включение (является ли 1 множество подмножеством...


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

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

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