Форум программистов, компьютерный форум CyberForum.ru

Тип множество - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 35, средняя оценка - 4.89
Orakul
 Аватар для Orakul
2 / 2 / 0
Регистрация: 07.07.2012
Сообщений: 106
08.07.2012, 17:15     Тип множество #1
Кто знает в делфи есть тип множество например set of char=['a'..'z'] ,
а в с++ есть аналог? или приходится довольствоваться массивами.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Арсенал
144 / 66 / 6
Регистрация: 30.12.2011
Сообщений: 137
08.07.2012, 17:39     Тип множество #2
Orakul

http://cplusplus.com/reference/stl/set/
Orakul
 Аватар для Orakul
2 / 2 / 0
Регистрация: 07.07.2012
Сообщений: 106
08.07.2012, 17:43  [ТС]     Тип множество #3
Арсенал,
а на могучем не имеется?
Catstail
Модератор
 Аватар для Catstail
21500 / 10253 / 1669
Регистрация: 12.02.2012
Сообщений: 17,139
08.07.2012, 18:48     Тип множество #4
Множества неплохо моделируются битовыми шкалами.
Orakul
 Аватар для Orakul
2 / 2 / 0
Регистрация: 07.07.2012
Сообщений: 106
08.07.2012, 18:58  [ТС]     Тип множество #5
Catstail,
а по подробнее про битовые шкалы ?
Catstail
Модератор
 Аватар для Catstail
21500 / 10253 / 1669
Регистрация: 12.02.2012
Сообщений: 17,139
08.07.2012, 19:05     Тип множество #6
Для битовых шкал идеально подходят беззнаковые целые. Если Ваши множества содержат не более 32-х элементов, то достаточно long. Если больше - массив long.

Рассмотрим простой случай:

Чтобы поднять i-й бит переменной unsigned long Scale выполняем код:

C++
1
Scale=Scale | (1 << i);
Чтобы опросить i-й бит, пишем:

C++
1
if (Scale & (1 << i) ...
Операции над множествами выполняются, как логические:

Объединение: Scale1 | Scale2
Пересечение: Scale1 & Scale2
Отрицание: ~Scale

Вроде бы так...
xADMIRALx
 Аватар для xADMIRALx
66 / 60 / 1
Регистрация: 09.06.2012
Сообщений: 291
08.07.2012, 19:07     Тип множество #7
Catstail
Не подскажете где можна почитать про байты биты и т.д ?
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
08.07.2012, 19:07     Тип множество #8
Цитата Сообщение от Orakul Посмотреть сообщение
а по подробнее
для чего вам множество? опишите задачу
Zuzik
 Аватар для Zuzik
219 / 204 / 34
Регистрация: 11.06.2012
Сообщений: 1,336
08.07.2012, 19:13     Тип множество #9
Цитата Сообщение от Orakul Посмотреть сообщение
Арсенал,
а на могучем не имеется?
Если учишь программирование то ты будешь должен уметь разбирать инструкции и т.п. на английском, а не только на великом и могучем.
Orakul
 Аватар для Orakul
2 / 2 / 0
Регистрация: 07.07.2012
Сообщений: 106
08.07.2012, 19:22  [ТС]     Тип множество #10
Jupiter,
так как я писал на делфи то и решил для изучения С++ и знакомства с синтаксисом
проще будет переписать на него свои программы с делфи. Так вот пишу программу компилятор с языка С++ (на делфи почти написал осталось чуток).Так вот у меня есть функция которая получает входные данные - строку кода который нужно проанализировать на предмет корректности символов. И вот те символы которые корректны находятся во множестве если входящий символ не находится во множестве тогда функция генерирует сообщение об ошибке
Pascal
1
2
3
4
5
function LexP(s: string): int64;                                                           // *
const                                                                                         // *
  lit: set of char = ['A' .. 'Z', 'a' .. 'z', '_'];                                            // *
  dig: set of char = ['0' .. '9'];                                                              // *
  s_trm: set of char = ['(',')', '>', '<', '='];
на паскале я использую множества а в С++ не знаю как правильно по синтаксису это дело
обставить.

Добавлено через 1 минуту
Zuzik,
Я полностью с Вами солидарен и это тоже в планах - ближайших.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
08.07.2012, 19:50     Тип множество #11
Orakul, используйте функции из хедера cctype
http://www.cplusplus.com/reference/clibrary/cctype/
Catstail
Модератор
 Аватар для Catstail
21500 / 10253 / 1669
Регистрация: 12.02.2012
Сообщений: 17,139
08.07.2012, 20:50     Тип множество #12
Про биты и байты - в любом элементарном курсе информатики
Avazart
 Аватар для Avazart
6903 / 5143 / 253
Регистрация: 10.12.2010
Сообщений: 22,616
Записей в блоге: 17
08.07.2012, 23:50     Тип множество #13
enum,std::set<>,а в Builder-е (если уже зашла речь про делфи) Set но для диапазонов значений используются ф-ции типа isalpha() http://www.cplusplus.com/reference/c...ctype/isalpha/
Orakul
 Аватар для Orakul
2 / 2 / 0
Регистрация: 07.07.2012
Сообщений: 106
09.07.2012, 00:53  [ТС]     Тип множество #14
Avazart,
А на примере покажи пожалуйста как объявить множество диапазона set of char['A'..'Z']

Добавлено через 42 минуты
Jupiter,
а пример показать не слабо на пример в делфи я так делаю:my_mnojistvo: set of char=['a'..'z'];
это я так объявил переменную а как это сделать в С++
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.07.2012, 01:30     Тип множество
Еще ссылки по теме:

C++ На плоскости задано множество точек. Выбрать три различные точки так, чтобы проходящая через них окружность делила это множество на группы
Узнать тип значения, зная тип указателя C++
Как сконвертировать свой тип в тип double? C++

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

Или воспользуйтесь поиском по форуму:
Avazart
 Аватар для Avazart
6903 / 5143 / 253
Регистрация: 10.12.2010
Сообщений: 22,616
Записей в блоге: 17
09.07.2012, 01:30     Тип множество #15
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
//---------------------------------------------------------------------------
#include <vcl.h>
#include <iostream>
#include <string>
 
#include <set>
 
#pragma hdrstop
#include <tchar.h>
//---------------------------------------------------------------------------
#pragma argsused
int _tmain(int argc, _TCHAR* argv[])
{
system("chcp 1251");
 
std::set<char> cs;
 
for(int i='A';i<='Z';i++) cs.insert(i);
 
std::string str="A1bZzh2;";
 
for(unsigned i=0;i<str.length();i++)
 if(cs.find(str[i])!=cs.end())
      std::cout<<str[i]<<" "<<"Принадлежит множеству"<<std::endl;
 else std::cout<<str[i]<<" "<<"Вне множества"        <<std::endl;
 
system("pause");
return 0;
}
//---------------------------------------------------------------------------
Вывод:
Код
Текущая кодовая страница: 1251
A Принадлежит множеству
1 Вне множества
b Вне множества
Z Принадлежит множеству
z Вне множества
h Вне множества
2 Вне множества
; Вне множества
Для продолжения нажмите любую клавишу . . .
Yandex
Объявления
09.07.2012, 01:30     Тип множество
Ответ Создать тему
Опции темы

Текущее время: 21:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru