Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/15: Рейтинг темы: голосов - 15, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 22.01.2015
Сообщений: 10

Проверка правильности введённых данных в StringGrid (C++ Builder)

08.02.2015, 20:56. Показов 3064. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребят, немного туго понимаю работу со строками и посимвольной проверкой...
Пользователь вводит число в ячейку StringGrid, нажимает кнопку "проверить", и программе нужно:
1) если первый или последний символ - не цифра - выдать сообщение об ошибке ввода;
2) если введено больше 2х запятых - выдать сообщение об ошибке ввода;
3) если после запятой введено больше 2 символов - выдать сообщение об ошибке;
4) если ничего не введено - заменить на ноль.

Подскажите, кто шарит в этом плиз.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.02.2015, 20:56
Ответы с готовыми решениями:

Проверка правильности введённых данных
Здравствуйте, есть задача: Напишите программу, которая определяет, имеется ли среди введенных с клавиатуры чисел, а и b – лежащие в...

Проверка правильности введенных данных
Добрый день! Имеется лаба: Задача 3.1. Создайте сайт из двух страниц.Первая страница имеет заголовок Заказ мебели. На ней расположены два...

Проверка правильности введенных данных в ячейке DataGridView?
Здавствуйте, уважаемые! Как осуществить проверку на предмет того, было ли правильно введено значение в ячейку? Формат ячейки - дата. Я...

10
Я Фоюмчанин ? дааааа)
 Аватар для ivan.-94
213 / 204 / 23
Регистрация: 02.06.2012
Сообщений: 1,424
Записей в блоге: 12
08.02.2015, 21:51
в AnsiString можно легко обратится к любому элементу.
AnsiString str;
str[1] - первый символ, да у AnsiString нумерация с единицы.
str[str.Length()] - последний символ.
все str[i] - char символы
if (str=="") - строка пустая

Дерзайте.
0
12 / 12 / 9
Регистрация: 12.04.2012
Сообщений: 259
08.02.2015, 22:24
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <ctype.h>
 
 
 
char check1,check2;
String proverk=StringGrid1->Cells[1][1];
 
if(proverk=="")
StringGrid1->Cells[1][1]='0'; //  если ничего не введено - заменить на ноль.
check1=proverk[1];
check2=proverk[proverk.Length()];
if(isdigit(check1)==0 || isdigit(check2)==0)
   ShowMessage("Error"); //если первый или последний символ - не цифра - выдать сообщение об ошибке ввода;
 if(proverk.Pos(',')){   //Проверка запятой
 
  proverk=proverk.Delete(1,proverk.Pos(','));
  if(proverk.Pos(',') ) ShowMessage("Больше двух запятых"); //если введено больше 2х запятых - выдать сообщение об ошибке ввода;
 if(proverk.Length()>2)  ShowMessage("После запятой введено больше 2 символов!");
 
 
 }
 else
 ShowMessage("Нет запятой!");
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33393 / 21503 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 12
08.02.2015, 23:09
Зачем это все? Builder XE+:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <System.RegularExpressions.hpp>
 
// ...
 
    String s = StringGrid1->Cells[1][1];
 
    if (s.IsEmpty()) s = "0";
    if (!IsDigit(s[1]) || !IsDigit(*(s.LastChar())))
        ShowMessage(L"Первый или последний символ - не цифра");
    else if (TRegEx::Matches(s, ",").Count > 2)
        ShowMessage(L"Больше двух запятых в строке");
    else if (TRegEx::Matches(s, ",([^,]{3,})").Count > 0)
        ShowMessage(L"После запятой больше двух символов");
    else ShowMessage(String(L"Проверка пройдена: ") + s);
1
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
09.02.2015, 12:08
volvo, можно было б еще добавить проверочку на DecimalSeparator. Это так всмысле, если уж перфекционизмом страдать.
0
Я Фоюмчанин ? дааааа)
 Аватар для ivan.-94
213 / 204 / 23
Регистрация: 02.06.2012
Сообщений: 1,424
Записей в блоге: 12
09.02.2015, 14:21
А по моему глупые проверки, все проверки сводятся к одному выводу - не корректное число с плавающей точкой)))
Сперва проверка на пусто, а после можно просто StrToFloat и отлавливать исключительную ситуацию.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33393 / 21503 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 12
09.02.2015, 14:52
Никакого StrToFloat тут нет, две запятые откуда возьмутся в вещественном числе? А ТС говорит, что 2 - нормально, а больше - ай-яй-яй...
Цитата Сообщение от SatanaXIII Посмотреть сообщение
добавить проверочку на DecimalSeparator
Еще раз: где вообще что-то о вещественных числах сказано? Не нужна тут проверка на DecimalSeparator, у ТС-а есть формат ввода какого-то строкового выражения, и ему надо проверить совпадает ли то, что ввел пользователь, с заданным форматом.
0
74 / 54 / 17
Регистрация: 10.07.2014
Сообщений: 329
09.02.2015, 14:57
Цитата Сообщение от ivan.-94 Посмотреть сообщение
А по моему глупые проверки, все проверки сводятся к одному выводу - не корректное число с плавающей точкой)))
Сперва проверка на пусто, а после можно просто StrToFloat и отлавливать исключительную ситуацию.
Это же было бы банально.. А так - четко по списку ТС-а )
может ему именно это и надо, а не просто проверка на корректность.
да и не все проверки со списка ТС будут при корректном флоате. как и наоборот.
хотя конечно... зачем ТС-у ввод к примеру чего-то такого "1йц8,е5" - только он и знает
0
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
07.10.2015, 22:22
Апну тему. А как организовать проверку вводимых данных на лету? Т.е. если пользователю, например, разрешается вводить только числа (можно с точкой), то код можно прописать такой:
C++
1
2
3
4
5
6
7
void __fastcall TMainForm::Tabl_DsKeyPress(TObject *Sender, System::WideChar &Key)
{
    if (!isdigit(Key))
        {
        ShowMessage("Вводите только числа!!!");
        }
}
Причем нужно учесть коды некоторых клавиш (пробел, энтер и т.п.). Но при таком подходе все-равно строковые символы вводятся.
Вопрос. Как при таком событии (KeyPress) в таблице, отказаться от введенного строкового символа ? Смещать курсор на одну позицию назад и удалять введеный символ ?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33393 / 21503 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 12
07.10.2015, 22:49
C++
1
2
3
4
5
    if (!isdigit(Key))
    {
        Key = 0; // Магия :)
        ShowMessage(L"Вводите только числа!!!");
    }
1
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
07.10.2015, 22:55
Цитата Сообщение от volvo Посмотреть сообщение
Key = 0; // Магия
Вот это расклад))), спасибо большое!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.10.2015, 22:55
Помогаю со студенческими работами здесь

Проверка правильности последовательности введённых символов
Допустим есть три символа (a, b, c). Я поочерёдно ввожу эти символы в аналогичном порядке(в консоли, через оператор cin например). Нужно...

Проверка правильности введенных фамилий и имен
Здравствуйте)Помогите пожалуйста решить небольшую задачу. Создайте страницу Web-приложения, выполняющего проверку правильности введенных...

Запрос логина и пароля и проверка правильности введенных значений
написать программу запрашивающая логин и пароль и выполняющую проверку правильности введенных значений

Проверка правильности введенных дат с использованием регулярных выражений
Напишите программу с использованием регулярных выражений, выполняющую проверкуправильности введенных даты в виде, например, 17 октября 2016...

Проверка правильности ввода данных
имеется несколько groupbox с radoibutton и несколько texbox, куда необходимо ввести значения переменных. когда выбирается radiobutton из...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru