Есть ли в С++ подобие in.
if MyVay in [Val1,Val2,...,Valn] then
Можно ли что-то подобное сделать в С++
typedef Set<char,'a','z'> LowerSet;
LowerSet ae; // объявление набора
ae << 'a' // занесение в набор
ae >> 'a' // удаление из набора
if(ae.Contains('a')) // проверка наличия
{
}
через такой механизм реализованы многие свойства в VCL, например, свойства шрифта...
прямо так не получится... есть тип такая вещь - Set - работает так:
typedef Set<char,'a','z'> LowerSet;
LowerSet ae; // объявление набора
ae << 'a' // занесение в набор
ae >> 'a' // удаление из набора
if(ae.Contains('a')) // проверка наличия
{
}
через такой механизм реализованы многие свойства в VCL, например, свойства шрифта...
Мне надо, чтобы в Edit можно было печатать только цифры.
Нашёл пример:
void __fastcall TFormSound::Edit1KeyPress(TObject *Sender, char &Key)
{
Set <char, '0','9'> Dig;
Dig << '0' << '1' << '2' << '3' << '4' << '5' << '6' << '7'
<< '8' << '9';
if (!Dig.Contains(Key))
{
Key = 0;
Beep();
}
}
Но этот обработчик не позволяет юзеру стирать цфры бэкспейсом или делетом. Как это обойти. При нажатии Backspace параметр Key принимает значение '\b'. Как го поместить в поток?
void __fastcall TForm1::ComboBox1KeyPress(TObject *Sender, char &Key)
{
if((Key - '0' > 9 || Key - '0' < 0) && Key != '\b')
Key = 0;
}
так бы сразу и сказал :) - тогда еще проще:
void __fastcall TForm1::ComboBox1KeyPress(TObject *Sender, char &Key)
{
if((Key - '0' > 9 || Key - '0' < 0) && Key != '\b')
Key = 0;
}
А isdigit теперь уже не модно?:D
второе условие все равно добавлять придется, а вместо первого условия можно и isdigit поставить, хотя так все-таки немного быстрее, по-моему, - не тратится время на вызов функции и возвращение значения, но это не принципиально...
точно! isdigit! но она все равно тем же самым занимается :)...
второе условие все равно добавлять придется, а вместо первого условия можно и isdigit поставить, хотя так все-таки немного быстрее, по-моему, - не тратится время на вызов функции и возвращение значения, но это не принципиально...
всем спасибо. Но вопрос остаётся. Можно как нибудь в множество Dig(см. выше) Занести значение, чтобы при нажатии Backspace Dig.Contains(Key) возвращал истину? Чистое любопытство, может потом пригодится,
так и помести: << '\b' - это ведь как бы тоже символ...
Пробовал - не получается. Слэш - это же управляющий символ.
в Set передаются первый и последний элемент, которые ограничивают диапазон величин, которые могут входить в Set, поэтому надо подкорректировать объявление:
было: Set <char, '0','9'> Dig;
стало: Set <char, '\b','9'> Dig;
а дальше все также, только добавляем '\b':
Dig << '0' << '1' << '2' << '3' << '4' << '5' << '6' << '7' << '8' << '9' << '\b';
З.Ы. Проверил - работает!