Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.93/43: Рейтинг темы: голосов - 43, средняя оценка - 4.93
0 / 0 / 0
Регистрация: 23.10.2018
Сообщений: 142

Определить, является ли введенный автомобильный государственный регистрационный номер верным

21.04.2019, 16:29. Показов 9340. Ответов 40

Студворк — интернет-сервис помощи студентам
Помогите, пожалуйста, написать программу по данной задаче:

Основная часть автомобильного государственного регистрационного номера состоит из 6 символов: трех букв и трех цифр. Сначала идет буква, затем 3 цифры и еще 2 буквы заканчивают запись. В качестве цифр могут использоваться любые цифры от 0 до 9, а в качестве букв только заглавные буквы, обозначения которых присутствуют как в английском, так и в русском алфавите, т.е. только следующие символы: A, B, C, E, H, K, M, O, P, T, X, Y. Например, «P204BT» - правильный номер, а «X182Yx» и «ABC216» - нет.
Определить, является ли введенный номер верным.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.04.2019, 16:29
Ответы с готовыми решениями:

Определить является ли введенный шестизначный номер «счастливым»
Помогите кому не сложно) Язык Си. Составить программу, определяющую является ли введенный шестизначный номер «счастливым» (совпадает ли у...

Запросить у пользователя e-mail и определить является ли он верным
Запросить у пользователя e-mail и определить является ли он верным У кого-то есть код на с++

При поселении в гостиницу каждый участник конференции указал свой регистрационный номер, дату и время приезда и отъезда, номер комнаты и номер телефон
При поселении в гостиницу каждый участник конференции указал свой регистрационный номер, дату и время приезда и отъезда, номер комнаты и...

40
454 / 278 / 163
Регистрация: 17.04.2019
Сообщений: 1,637
25.04.2019, 19:35
Студворк — интернет-сервис помощи студентам
llatibro, попробуйте эти методы, это с использованием регулярных выражений:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Boolean^ ValidateRegistrationPlateEngLetters(String^ registrationPlate)
{
    return Regex::Match(registrationPlate, "^[ABCEHKMOPTXY]\\d{3}[ABCEHKMOPTXY]{2}$")->Success;
}
    
Boolean^ ValidateRegistrationPlateRusLetters(String^ registrationPlate)
{
    return Regex::Match(registrationPlate, "^[АВСЕНКМОРТХУ]\\d{3}[АВСЕНКМОРТХУ]{2}$")->Success;
}
    
Boolean^ ValidateRegistrationPlate(String^ registrationPlate)
{
    registrationPlate = registrationPlate->Trim();
        
    return (ValidateRegistrationPlateEngLetters(registrationPlate) || ValidateRegistrationPlateRusLetters(registrationPlate));
}
Вызывать проверку так:
C++
1
2
3
4
if (ValidateRegistrationPlate("А291ВВ"))
{
    //номерной знак правильный
}
1
0 / 0 / 0
Регистрация: 23.10.2018
Сообщений: 142
25.04.2019, 19:45  [ТС]
повар1, ругается на значение в скобках массива letter. Значение типа const char[13] нельзя использовать для инициализации сущности типа char[12]. Если поменять значение на 13, то всё ок.
Ваше решение кажется мне каким-то странным) Да, перенести его на Форму не составит особого труда, но как-то глаз режет, когда каждую конструкцию приходится дублировать для заглавных и прописных букв.

Добавлено через 1 минуту
Если кто-то сможет внедрить в код ProgItEasy IndexOf, либо же написать прогу через регулярки, то буду очень благодарен
0
454 / 278 / 163
Регистрация: 17.04.2019
Сообщений: 1,637
25.04.2019, 20:03
llatibro, посмотрите выше, я написал через регулярки.
0
 Аватар для zayats80888
6353 / 3524 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
25.04.2019, 20:11
llatibro, переписал код ProgItEasy
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <string>
#include <regex>
 
int main()
{
    std::locale::global(std::locale(".866"));
    std::wregex eng_pat{ L"^[ABCEHKMOPTXY]\\d{3}[ABCEHKMOPTXY]{2}$" };
    std::wregex rus_pat{ L"^[АВСЕНКМОРТХУ]\\d{3}[АВСЕНКМОРТХУ]{2}$" };
 
    std::wstring num;
    std::wcin >> num;
    std::cout << std::boolalpha << (std::regex_match(num, eng_pat) || std::regex_match(num, rus_pat));
}
1
0 / 0 / 0
Регистрация: 23.10.2018
Сообщений: 142
25.04.2019, 20:15  [ТС]
ProgItEasy, не понимаю в какое место кода это писать....
Миниатюры
Определить, является ли введенный автомобильный государственный регистрационный номер верным  
0
454 / 278 / 163
Регистрация: 17.04.2019
Сообщений: 1,637
25.04.2019, 20:20
zayats80888, человеку нужен код на C++/CLI.
0
 Аватар для zayats80888
6353 / 3524 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
25.04.2019, 20:22

Не по теме:

ProgItEasy, уже понял

0
454 / 278 / 163
Регистрация: 17.04.2019
Сообщений: 1,637
25.04.2019, 20:26
llatibro,
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
private:
System::Boolean^ ValidateRegistrationPlateEngLetters(System::String^ registrationPlate)
{
    return Regex::Match(registrationPlate, "^[ABCEHKMOPTXY]\\d{3}[ABCEHKMOPTXY]{2}$")->Success;
}
    
System::Boolean^ ValidateRegistrationPlateRusLetters(System::String^ registrationPlate)
{
    return Regex::Match(registrationPlate, "^[АВСЕНКМОРТХУ]\\d{3}[АВСЕНКМОРТХУ]{2}$")->Success;
}
    
System::Boolean^ ValidateRegistrationPlate(System::String^ registrationPlate)
{
    registrationPlate = registrationPlate->Trim();
        
    return (ValidateRegistrationPlateEngLetters(registrationPlate) || ValidateRegistrationPlateRusLetters(registrationPlate));
}
    
System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)
{
    if (ValidateRegistrationPlate(textBox1->Text))
        textBox2.Text = "Верный";
    else
        textBox2.Text = "Неверный";
}
1
0 / 0 / 0
Регистрация: 23.10.2018
Сообщений: 142
25.04.2019, 20:45  [ТС]
Не считает за класс почему-то
Миниатюры
Определить, является ли введенный автомобильный государственный регистрационный номер верным  
0
848 / 651 / 323
Регистрация: 24.02.2017
Сообщений: 2,297
25.04.2019, 22:15
Лучший ответ Сообщение было отмечено llatibro как решение

Решение

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
#include <iostream>
using namespace std;
 
int main(){
    string namber,format="000000";
    size_t len;
    char letter[6]={'A','B','C',128,130,145};//128,130,145 коды русских букв
 
    getline(cin, namber);
    len=namber.length();
    if(len!=6){
      cout<<"invalid number format";
      system("pause");
      return 0;
     }
     for(int i=1;i<4;i++)
       if(isdigit(namber[i]))
            format[i]=namber[i];
 
     for(int i=0;i<6;i++){
           if(letter[i]==namber[0])format[0]=namber[0];
           if(letter[i]==namber[4])format[4]=namber[4];
           if(letter[i]==namber[5])format[5]=namber[5];
           }
 
     namber==format ? cout<<"correct number" : cout<<"invalid number";
     system("pause");
     return 0;
}
1
0 / 0 / 0
Регистрация: 23.10.2018
Сообщений: 142
26.04.2019, 19:58  [ТС]
повар1, похоже это самое оптимальное решение из всех, спасибо большое)
0
454 / 278 / 163
Регистрация: 17.04.2019
Сообщений: 1,637
26.04.2019, 20:07
llatibro, не видит этот класс, потому как нужно подключить пространство имен RegularExpressions:
C++
1
using namespace System::Text::RegularExpressions;
1
0 / 0 / 0
Регистрация: 23.10.2018
Сообщений: 142
28.04.2019, 09:00  [ТС]
Перенес в винформс всё что смог, но с этим не знаю что делать.
1 - код
2 - ошибки
3 - измененный код выдает другие ошибки (чисто ради интереса)
Миниатюры
Определить, является ли введенный автомобильный государственный регистрационный номер верным   Определить, является ли введенный автомобильный государственный регистрационный номер верным   Определить, является ли введенный автомобильный государственный регистрационный номер верным  

0
0 / 0 / 0
Регистрация: 23.10.2018
Сообщений: 142
28.04.2019, 09:21  [ТС]
ProgItEasy, Теперь в коде не подчеркивает, но при компиляции ошибки всё равно выдает...
Миниатюры
Определить, является ли введенный автомобильный государственный регистрационный номер верным  
0
0 / 0 / 0
Регистрация: 23.10.2018
Сообщений: 142
28.04.2019, 19:33  [ТС]
С типами разобрался, сделал так

String^ nom;
String^ format = "000000";

Добавлено через 5 часов 30 минут
Из ошибок осталось только isdigit

Добавлено через 1 час 53 минуты
повар1, сделал такой код. Единственная ошибка "isdigit: идентификатор не найден". Думаю это из-за того что isdigit относится к char, а nom относится к String. Если можно как-то исправить, чтобы сохранить String^ nom, то было бы очень неплохо. Если так нельзя и придется nom присваивать char, то ладно, хоть так...
0
848 / 651 / 323
Регистрация: 24.02.2017
Сообщений: 2,297
28.04.2019, 20:55
замени
C++
1
if(isdigit(namber[i]))
на
C++
1
 if(namber[i]>='0' && namber[i]<='9' )
0
0 / 0 / 0
Регистрация: 23.10.2018
Сообщений: 142
29.04.2019, 09:43  [ТС]
повар1, Код почему-то не прикрепил, но вот он. Сейчас выскакивает ошибка при нажатии кнопки определить в винформс

C++ (Qt)
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#pragma endregion
/*Основная часть автомобильного государственного регистрационного номера состоит из 6 символов: трех букв и трех цифр.
Сначала идет буква, затем 3 цифры и еще 2 буквы заканчивают запись.
В качестве цифр могут использоваться любые цифры от 0 до 9, а в качестве букв только прописные буквы,
обозначения которых присутствуют как в английском, так и в русском алфавите, т.е. только следующие символы: A, B, C, E, H, K, M, O, P, T, X, Y.
Например, «P204BT» - правильный номер, а «X182Yx» и «ABC216» - нет.
Определить, является ли введенный номер верным.*/
 
    private: System::Void MyForm_Load(System::Object^  sender, System::EventArgs^  e) {
    }
    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
 
        String^ nom; 
        char format[7] = "000000";
        char buk[24] = { 'A','B','C','E','H','K','M','O','P','T','X','Y',128,130,145,133,141,138,140,142,144,146,149,147 };
            
        textBox1->Text;
 
        if (nom->Length != 6)
        {
            String^ k = "Неверный";
            textBox2->Text = System::Convert::ToString(k);
        }
        for (int i = 1; i < 4; i++)
            if (nom[i] >= '0' && nom[i] <= '9')
                format[i] = nom[i];
 
        for (int i = 0; i < 24; i++)
        {
            if (buk[i] == nom[0])
                format[0] = nom[0];
            if (buk[i] == nom[4])
                format[4] = nom[4];
            if (buk[i] == nom[5])
                format[5] = nom[5];
        }
        for (int i = 0; i < 6; i++) 
            if (format[i] == nom[i])
        {
            String^ k = "Верный";
            textBox2->Text = System::Convert::ToString(k);
        }
        else
        {
            String^ k = "Неверный";
            textBox2->Text = System::Convert::ToString(k);
        }
    }
    };
Миниатюры
Определить, является ли введенный автомобильный государственный регистрационный номер верным  
0
0 / 0 / 0
Регистрация: 23.10.2018
Сообщений: 142
29.04.2019, 10:27  [ТС]
ProgItEasy, теперь ошибок в регулярках нет, форма запускается, все вводится и нажимается, НО что бы я ни ввел, пишет что номер Верный. Что с этим делать?
0
848 / 651 / 323
Регистрация: 24.02.2017
Сообщений: 2,297
29.04.2019, 10:50
Цитата Сообщение от llatibro Посмотреть сообщение
for (int i = 0; i < 6; i++)
* * * * * * if (format[i] == nom[i])
* * * * {
* * * * * * String^ k = "Верный";
* * * * * * textBox2->Text = System::Convert::ToString(k);
* * * * }
* * * * else
* * * * {
* * * * * * String^ k = "Неверный";
* * * * * * textBox2->Text = System::Convert::ToString(k);
* * * * }
Похоже это не правильно работает. попробуй if - else в скобки взять. Строка 48 похоже лишняя
0
0 / 0 / 0
Регистрация: 23.10.2018
Сообщений: 142
29.04.2019, 16:03  [ТС]
повар1, не лишняя. Просто это не весь код. Там сверху еще больше сотни строк, относящихся к самой форме. Если Вы про фигурные скобки, то не, не исправилось
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.04.2019, 16:03

Определить, является ли введенный символ числом
Написать программу, которая вводит один символ с клавиатуры и выводит сообщение, является ли введенный символ числом (Коды числовых...

Определить, является ли введенный текст палиндромом
Ввести строку , содержащую некоторый текст. Определить, является ли данный текст палиндромом, т.е. читается ли он слева направо так же, как...

Определить, является ли введенный год високосным
&lt;html&gt; &lt;script type=&quot;text/javascript&quot;&gt; ,,, function isLeapYear (year) { return new Date(year, 1, 29).getMonth() == 1; } ,,,...

Определить, является ли введённый год високосным
3.Дано целое положительное число, соответствующее номеру года. Напишите программу, позволяющую определить является ли введённый год...

Определить, является ли введенный пользователем год високосным
3)На языке программирования С++ напишите программу, определяющую, является ли введенный пользователем год високосным, используя правило:...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru