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

Qt

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

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

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

Добрый день
Суть проблемы такова:
У меня есть QString строка в которую можно вводить любые символы. После ввода и занесения вводимых символов в переменную нужно проверить, является ли эта строка 16-м числом.
Например введенная строка "fbc21" пройдет проверку, а "fg31o" -не пройдет.
Как организовать?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.06.2012, 16:33
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Проверка данных на число (C++ Qt):

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

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

Проверка на существование Базы данных - C++ Qt
Этот код проверяет на существование файла базы данных и если он не существует создает его иначе восстанавливает готовую базу void...

Qt, XMPP, проверка полноты принятых данных - C++ Qt
Пишу небольшой XMPP клиент. Проверяю полноту данных таким образом: bool CIncomingDataManager::isFullData(QByteArray btaData) { ...

Проверка данных перед записью в модель - C++ Qt
Здравствуйте! В общем, возникла следующая ситуация: Дан QListView, к которому прикручена модель QStringListModel и кастомный делегат...

Проверка введенных данных: число/не число - C++
проходим try catch throw в универе. взял стаааааарую прогу и в нее вкладываю проверки введенных данных посредством try catch throw но у...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Maxim Prishchepa
Эксперт С++
1922 / 1034 / 74
Регистрация: 29.03.2010
Сообщений: 3,167
13.06.2012, 16:52 #2
эмм.... QRegExpValidator написать правельный и прикрутить его к QLineEdit-у
1
Voka
202 / 194 / 59
Регистрация: 27.12.2010
Сообщений: 819
Записей в блоге: 1
13.06.2012, 16:57  [ТС] #3
Цитата Сообщение от l_a_m Посмотреть сообщение
эмм.... QRegExpValidator написать правельный и прикрутить его к QLineEdit-у
Это я могу, а нужно что бы проврялась переменная, а не вводимые знаки.
0
Maxim Prishchepa
Эксперт С++
1922 / 1034 / 74
Регистрация: 29.03.2010
Сообщений: 3,167
13.06.2012, 17:03 #4
тогда прикручивать к QLineEdit-y не нужно )))
а просто написать регулярку которая будет анализировать строку
1
Voka
202 / 194 / 59
Регистрация: 27.12.2010
Сообщений: 819
Записей в блоге: 1
13.06.2012, 17:04  [ТС] #5
Цитата Сообщение от l_a_m Посмотреть сообщение
а просто написать регулярку которая будет анализировать строку
Вот я и не могу организовать, помогите пожалуйста =)
0
Maxim Prishchepa
Эксперт С++
1922 / 1034 / 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;
}
что-то типа такого должно быть...
3
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
Что вот это делает?
0
Maxim Prishchepa
Эксперт С++
1922 / 1034 / 74
Регистрация: 29.03.2010
Сообщений: 3,167
13.06.2012, 17:31 #8
учите матчасть)))
начните с бинарных операторов
1
Voka
202 / 194 / 59
Регистрация: 27.12.2010
Сообщений: 819
Записей в блоге: 1
13.06.2012, 17:32  [ТС] #9
Цитата Сообщение от l_a_m Посмотреть сообщение
учите матчасть)))
начните с бинарных операторов
Я понимаю что это "не равно -1", а для чего писать его?
0
Maxim Prishchepa
Эксперт С++
1922 / 1034 / 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;
1
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;
понятно,спасибо большое
0
Maxim Prishchepa
Эксперт С++
1922 / 1034 / 74
Регистрация: 29.03.2010
Сообщений: 3,167
13.06.2012, 17:39 #12
всегда пожалуйста, кстати спасибо можно сказать с помощью соответствующей кнопки под каждым сообщением
2
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;
}
0
Avazart
Эксперт С++
7188 / 5362 / 280
Регистрация: 10.12.2010
Сообщений: 23,664
Записей в блоге: 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
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.01.2017, 15:06
Привет! Вот еще темы с ответами:

Проверка введённых данных: число или нет? - CMD/BAT
Можно ли задать условие на проверку ввода? Например, пользователь вводит число в переменную, после чего программа должна проверить число ли...

Visual C++ проверка ввода на число, проверка на кирилицу - C++
Суть ввести с клавиатуры нечто, и повторять ввод до тех пор пока введенное число не будет числом. Этот код проверяет на буквы и знаки,...

Проверка данных в Access (проверка Статуса Кандидата) - MS Access
Всем доброго времени суток! Проблема такая. В бд есть таблица кандидатов, в ней есть номер телефона кандидата. Перед заполнением...

Проверка, делится ли число на другое число без остатка - Visual Basic .NET
Есть ли в Visual Basic.NET оператор или функция, которая проверяет делится ли одно число на другое без остатка?


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
08.01.2017, 15:06
Ответ Создать тему
Опции темы

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