Почему при неверном четвертом элементе строки у меня выводится "Yes"?

182
09 декабря 2021, 20:20
#include <iostream>
#include <string>
using namespace std;
int main ()
{
    int k;
    cin >> k;
    string arr[k];
    for (int i = 0;i < k ;i++)
    {
        cin >> arr[i];
    }
    for (int i = 0;i < k;i++)
    {
        string S;
        S = arr[i];
        cout << S[4];
        if (S[0] == 'A' || S[0] == 'B' || S[0] == 'C' || S[0] == 'E' || S[0] == 'H' || S[0] == 'K' || S[0] == 'M' || S[0] == 'O' || S[0] == 'P' || S[0] == 'T' || S[0] == 'X' || S[0] == 'Y' && S[1] >= 48 && S[1] <= 57 && S[2] >= 48 && S[2] <= 57 && S[3] >= 48 && S[3] <= 57 && S[4] == 'A' || S[4] == 'B' || S[4] == 'C' || S[4] == 'E' || S[4] == 'H' || S[4] == 'K' || S[4] == 'M' || S[4] == 'O' || S[4] == 'P' || S[4] == 'T' || S[4] == 'X' || S[4] == 'Y')
        cout << "Yes" << endl;
        else
        cout << "No" << endl;
                                                                                                                                                                                                                                                                                                                                                                                                                                            // A, B, C, E, H, K, M, O, P, T, X, Y.
    }
}

Однажды Вася очень долго просидел на остановке, прежде чем дождался своего автобуса. Чтобы как-то занять время, он решил записывать на листочке государственные регистрационные номера проходящих мимо автобусов, следующих по другому маршруту, нежели нужен был Васе. При этом производилась запись лишь основного номера, без учета региональной принадлежности. В итоге Васе удалось записать N таких номеров.

Основная часть государственного регистрационного номера состоит из 6 символов: трех букв и трех цифр. Сначала идет буква, затем 3 цифры и еще 2 буквы заканчивают запись. В качестве цифр могут использоваться любые цифры от 0 до 9, а в качестве букв только прописные буквы, обозначения которых присутствуют как в английском, так и в русском алфавите, т.е. только следующие символы: A, B, C, E, H, K, M, O, P, T, X, Y. Например, «P204BT» - правильный номер, а «X182YZ» и «ABC216» - нет.

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

Входные данные Первая строка входного файла INPUT.TXT содержит единственное натуральное число N – количество записанных Васей номеров (N ≤ 50). Далее следует N строк с записями номеров автобусов. Длины строк от 1 до 300 и содержат только символы с кодами ASCII от 33 до 127 (не содержат пробелов, специальных и русских символов).

Выходные данные В выходной файл OUTPUT.TXT выведите N строк, в i-й строке должно содержаться «Yes», если соответствующая i-я запись номера верна и «No» в противном случае.

Пример № INPUT.TXT

P204BT
X182YZ
a216bc
A216BC
ABC216  

output.txt

Yes
No
No
Yes
No
Answer 1

Попробуйте такой вариант:

include <iostream>
#include <string>
using namespace std;
int main ()
{
    int k;
    cin >> k;
    string arr[k];
    for (int i = 0;i < k ;i++)
    {
        cin >> arr[i];
    }
    for (int i = 0;i < k;i++)
    {
        string S;
        S = arr[i];
        cout << S[4];
        if ((S[0] == 'A' || S[0] == 'B' || S[0] == 'C' || S[0] == 'E' || 
             S[0] == 'H' || S[0] == 'K' || S[0] == 'M' || S[0] == 'O' || 
             S[0] == 'P' || S[0] == 'T' || S[0] == 'X' || S[0] == 'Y') 
         && (S[1] >= 48 && S[1] <= 57 && S[2] >= 48 && 
             S[2] <= 57 && S[3] >= 48 && S[3] <= 57) 
         && (S[4] == 'A' || S[4] == 'B' || S[4] == 'C' || S[4] == 'E' || 
             S[4] == 'H' || S[4] == 'K' || S[4] == 'M' || S[4] == 'O' || 
             S[4] == 'P' || S[4] == 'T' ||  S[4] == 'X' || S[4] == 'Y'))
        cout << "Yes" << endl;
        else
        cout << "No" << endl;
                                                                                                                                                                                                                                                                                                                                                                                                                                            // A, B, C, E, H, K, M, O, P, T, X, Y.
    }
}
READ ALSO
Как считать слово из области данных BIOS на C++

Как считать слово из области данных BIOS на C++

Как считать 2-байтное слово из области данных BIOS по адресу 0040:0010 на C/C++?

88
Как конвертировать pdf в doc и odt

Как конвертировать pdf в doc и odt

Я нашел много алгоритмов по конвертации doc в pdf,но не нашел обратного алгоритмаПодскажите пожалуйста как сделать это на windows и на linux

196
Перемещение данных между lua и c++

Перемещение данных между lua и c++

Собственно ситуация такая: у меня есть библиотека для lua (написана на c++) которая предоставляет доступ к некоему объекту из c++ кода (допустим,...

95
Как остановить бесконечный поток из нового диалогового окна

Как остановить бесконечный поток из нового диалогового окна

Запустил бесконечный поток из окна mainwindowСоздал диалоговое окно menu по нажатию на кнопку мне нужно остановить бесконечный поток

153