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

Qt

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 27, средняя оценка - 5.00
Voka
202 / 194 / 59
Регистрация: 27.12.2010
Сообщений: 819
Записей в блоге: 1
#1

Проверка данных на число - C++ Qt

13.06.2012, 16:33. Просмотров 3739. Ответов 13
Метки нет (Все метки)

Добрый день
Суть проблемы такова:
У меня есть QString строка в которую можно вводить любые символы. После ввода и занесения вводимых символов в переменную нужно проверить, является ли эта строка 16-м числом.
Например введенная строка "fbc21" пройдет проверку, а "fg31o" -не пройдет.
Как организовать?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Maxim Prishchepa
Эксперт С++
1920 / 1032 / 74
Регистрация: 29.03.2010
Сообщений: 3,167
13.06.2012, 16:52     Проверка данных на число #2
эмм.... QRegExpValidator написать правельный и прикрутить его к QLineEdit-у
Voka
202 / 194 / 59
Регистрация: 27.12.2010
Сообщений: 819
Записей в блоге: 1
13.06.2012, 16:57  [ТС]     Проверка данных на число #3
Цитата Сообщение от l_a_m Посмотреть сообщение
эмм.... QRegExpValidator написать правельный и прикрутить его к QLineEdit-у
Это я могу, а нужно что бы проврялась переменная, а не вводимые знаки.
Maxim Prishchepa
Эксперт С++
1920 / 1032 / 74
Регистрация: 29.03.2010
Сообщений: 3,167
13.06.2012, 17:03     Проверка данных на число #4
тогда прикручивать к QLineEdit-y не нужно )))
а просто написать регулярку которая будет анализировать строку
Voka
202 / 194 / 59
Регистрация: 27.12.2010
Сообщений: 819
Записей в блоге: 1
13.06.2012, 17:04  [ТС]     Проверка данных на число #5
Цитата Сообщение от l_a_m Посмотреть сообщение
а просто написать регулярку которая будет анализировать строку
Вот я и не могу организовать, помогите пожалуйста =)
Maxim Prishchepa
Эксперт С++
1920 / 1032 / 74
Регистрация: 29.03.2010
Сообщений: 3,167
13.06.2012, 17:26     Проверка данных на число #6
а что там организовать то???
C++ (Qt)
1
2
3
4
bool isHex(const QString &str){
  QRegExp reg("[0-9a-hA-H]+");
  return reg.indexIn(str) != -1;
}
что-то типа такого должно быть...
Voka
202 / 194 / 59
Регистрация: 27.12.2010
Сообщений: 819
Записей в блоге: 1
13.06.2012, 17:28  [ТС]     Проверка данных на число #7
Цитата Сообщение от l_a_m Посмотреть сообщение
а что там организовать то???
C++ (Qt)
1
2
3
4
bool isHex(const QString &str){
  QRegExp reg("[0-9a-hA-H]+");
  return reg.indexIn(str) != -1;
}
что-то типа такого должно быть...
Большое спасибо, еще вопрос:

C++ (Qt)
1
!= -1
Что вот это делает?
Maxim Prishchepa
Эксперт С++
1920 / 1032 / 74
Регистрация: 29.03.2010
Сообщений: 3,167
13.06.2012, 17:31     Проверка данных на число #8
учите матчасть)))
начните с бинарных операторов
Voka
202 / 194 / 59
Регистрация: 27.12.2010
Сообщений: 819
Записей в блоге: 1
13.06.2012, 17:32  [ТС]     Проверка данных на число #9
Цитата Сообщение от l_a_m Посмотреть сообщение
учите матчасть)))
начните с бинарных операторов
Я понимаю что это "не равно -1", а для чего писать его?
Maxim Prishchepa
Эксперт С++
1920 / 1032 / 74
Регистрация: 29.03.2010
Сообщений: 3,167
13.06.2012, 17:32     Проверка данных на число #10
это то же самое, что и:
C++ (Qt)
1
2
3
if(reg.indexIn(str) != -1)
   return true;
return flase;
Voka
202 / 194 / 59
Регистрация: 27.12.2010
Сообщений: 819
Записей в блоге: 1
13.06.2012, 17:37  [ТС]     Проверка данных на число #11
Цитата Сообщение от l_a_m Посмотреть сообщение
это то же самое, что и:
C++ (Qt)
1
2
3
if(reg.indexIn(str) != -1)
   return true;
return flase;
понятно,спасибо большое
Maxim Prishchepa
Эксперт С++
1920 / 1032 / 74
Регистрация: 29.03.2010
Сообщений: 3,167
13.06.2012, 17:39     Проверка данных на число #12
всегда пожалуйста, кстати спасибо можно сказать с помощью соответствующей кнопки под каждым сообщением
iSolo
0 / 0 / 0
Регистрация: 13.04.2015
Сообщений: 2
08.01.2017, 12:43     Проверка данных на число #13
Maxim Prishchepa предоставил не точную функцию, тестеры посмеются. Дело в том, что строку "fg31o", которую приводили для примера, функция пропустит, хотя не должна.
Во-первых, у класса QString нет метода indexIn, правда есть indexOf. Это чисто синтаксическая ошибка.
Во-вторых, метод indexOf ищет первое вхождение подстроки в строку (причем начиная слева), и, если находит, возвращает номер символа, с которого это вхождение начинается. А если не находит, то возвращает "-1". В случае "fg31o", конкретно "fg31" является 16-ичным числом и регулярному выражению "[0-9a-hA-H]+" удовлетворяет, но последний символ "o" не является 16-ичным числом.
В ИТОГЕ: Функция, предоставленная Maxim Prishchepa не подходит, потому что определяет только наличие 16-ичного числа в строке, игнорируя прочий мусор, а требовалась функция, определяющая, является ли вся строка 16-ичным числом. Надо было действительно использовать QRegExpValidator.

Вот такая функция будет хорошо работать.
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
bool isHex(QString *str)
{
    int pos = 0;
 
    QRegExpValidator validator(QRegExp("[0-9a-hA-H]+"));
 
    if (validator.validate(*str, pos) == QValidator::Acceptable)
        return true;
 
    return false;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.01.2017, 15:06     Проверка данных на число
Еще ссылки по теме:

QProcess и проверка завершения C++ Qt
Проверка на существование базы данных C++ Qt
Проверка нажатия QPushButton C++ Qt
C++ Qt QListWidget и проверка в нём
Проверка на существование Базы данных C++ Qt

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

Или воспользуйтесь поиском по форуму:
Avazart
7063 / 5240 / 262
Регистрация: 10.12.2010
Сообщений: 23,052
Записей в блоге: 17
08.01.2017, 15:06     Проверка данных на число #14
Можно еще так, если в размер int умещается:

C++ (Qt)
1
2
3
4
5
6
7
QString str = "FF";
bool ok;
int hex = str.toInt(&ok, 16);
if(ok)
{
 // ...
}
http://doc.qt.io/qt-5/qstring.html#toInt
Yandex
Объявления
08.01.2017, 15:06     Проверка данных на число
Ответ Создать тему
Опции темы

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