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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Александр_Алекс
7 / 4 / 1
Регистрация: 08.12.2013
Сообщений: 165
#1

Несколько логически ИЛИ в условии if - C++

13.08.2014, 23:14. Просмотров 1338. Ответов 4
Метки нет (Все метки)

Здравствуйте! Вот такой, вроде бы несложный вопрос:
Есть функция, в которую передается массив символов, далее она проверяет устраивает ли первый символ заданному критерию, если нет то возвращает нолик, если да единичку.
Критерий таков: первый символ должен быть одним из этих -- A, B, C, E, H, K, M, O, P, T, X, Y.
Передаю такой массив: A000AA
Буква которые записаны в условии и массиве все в английской раскладке.
Мне кажется, что ошибка в самой записи условия, оно там длинное, я мог напутать.
Вот само условие
C++
1
2
3
if ((buff[0] != 'A') || (buff[0] !='B') || (buff[0] !='C') || (buff[0] !='E') || (buff[0] !='H') || (buff[0] !='M')
            || (buff[0] !='O') || (buff[0] !='P') || (buff[0] !='T') || (buff[0] !='X') || (buff[0] !='Y'))
        return 0;
Если нужно будет, скину весь код. Заранее спасибо.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.08.2014, 23:14
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Несколько логически ИЛИ в условии if (C++):

Массив символов (Подсчитать количество слов в строке, при условии, что в качестве разделителя слов используется один или несколько пробелов) - C++
Написать программу, в которой с клавиатуры вводится строка символов. Подсчитать количество слов в строке, при условии, что в качестве...

Логическое ИЛИ в условии цикла while - C++
Доброго времени суток. Комрады, ситуация следующая, цикл должен завершатся после введения одного из каких-либо 2-х (или более) символов....

Как в условии поставить проверку принадлежности к тому или иному типу? - C++
Как в условии поставить проверку принадлежности к тому или иному типу? Например: if (переменная принадлежит к целочисленном...

Логически правильное наследование исключений - C++
Как логически правильно наследовать исключения? Пока не сталкивался с необходимостью наследовать исключения, но все же бывает в первый раз,...

Сравнить логически два массива - C++
Сравнить , используя логическое или(||) два одномерных массива (А и В) и записать результат в массив С Массивы создал , но не знаю как...

Выделить логически связанные части кода в отдельные функции - C++
#include <iostream> using namespace std; int main() { setlocale( LC_ALL, "Russian" ); int Sum, i, j; bool Flag;...

4
rikimaru2013
C++ Game Dev
2468 / 1137 / 240
Регистрация: 30.11.2013
Сообщений: 3,700
13.08.2014, 23:24 #2
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
30
31
32
#include <cstring>
#include <iostream>
 
using namespace std;
bool check(char* ch)
{
    switch(*ch)
    {
        case 'A':
        case 'B':
        case 'C':
        case 'E':
        case 'H':
        case 'K':
        case 'M':
        case 'O':
        case 'P':
        case 'T':
        case 'X':
        case 'Y': 
            return 1;
        default: 
            return 0;
    }
}
void main()
{
    char* text = new char[255];
    strcpy(text, "Privet kak dela?");
    cout << check(text);
 
}
1
ValeryS
Модератор
6794 / 5202 / 499
Регистрация: 14.02.2011
Сообщений: 17,451
13.08.2014, 23:38 #3
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Александр_Алекс Посмотреть сообщение
Критерий таков: первый символ должен быть одним из этих -- A, B, C, E, H, K, M, O, P, T, X, Y.
а теперь смотри что будет если передать символ A
первое условие (buff[0] != 'A') ложь
второе (buff[0] !='B') истина
дальше не проверяется
все выражение истина
входим в if и возвращаем 0
тебе нужно использовать в этом случае И

C++
1
2
3
if ((buff[0] != 'A') && (buff[0] !='B') && (buff[0] !='C') && (buff[0] !='E') && (buff[0] !='H') && (buff[0] !='M')
            && (buff[0] !='O') && (buff[0] !='P') && (buff[0] !='T') && (buff[0] !='X') && (buff[0] !='Y'))
        return 0;
если хочешь использовать ИЛИ то измени проверку и возврашаемое значение
C++
1
2
3
if ((buff[0] == 'A') || (buff[0] =='B') || (buff[0] =='C') || (buff[0] =='E') || (buff[0] =='H') || (buff[0] =='M')
            || (buff[0] =='O') || (buff[0] =='P') || (buff[0] =='T') || (buff[0] =='X') || (buff[0] =='Y'))
        return 1;

но я бы лучше использовал свитч
не так страшно громадное условие да и править в случае чего удобно
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  switch((buff[0])
    {
        case 'A':
        case 'B':
        case 'C':
        case 'E':
        case 'H':
        case 'K':
        case 'M':
        case 'O':
        case 'P':
        case 'T':
        case 'X':
        case 'Y': 
            return 1;
        default: 
            return 0;
    }
Добавлено через 35 секунд
пока писал rikimaru2013, уже ответил

Добавлено через 9 минут
есть еще один вариант быстрый но не очевидный
массив значений
смотри
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// объявляем глобальный массив по количеству всех возможных комбинаций
// поскольку он глобальный обнуляется автоматически
int Val_return [256];
 
// потом где то в начале программы прописываем в нужные значения 1
  Val_return['A']=1;
  Val_return['B']=1;
  Val_return['C']=1;
  Val_return['E']=1;
  Val_return['H']=1;
  Val_return['K']=1;
  Val_return['M']=1;
  Val_return['O']=1;
  Val_return['P']=1;
  Val_return['T']=1;
  Val_return['X']=1;
  Val_return['Y']=1;
 
 
// и вот так будет выглядеть функция проверки
int fncVeryfy(char a)
{
return Val_return[a];
1
Александр_Алекс
7 / 4 / 1
Регистрация: 08.12.2013
Сообщений: 165
14.08.2014, 00:05  [ТС] #4
ValeryS, огромное спасибо за пояснение! Черт, прям глаза открыли, помню уже когда-то сталкивался с такой же проблемой, тоже не мог понять в чем дело.
0
some_name
Вежливость-главное оружие
227 / 225 / 55
Регистрация: 19.02.2013
Сообщений: 1,441
14.08.2014, 00:07 #5
А если так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include "stdafx.h"
#include <iostream>
 
int main ()
{
    char mask[] = "ABCEHKMOPTXY";
    char* test = "Me need more many!";
    if(strchr(mask, test[0])){
        std::cout << "Good!";
    }
    system("pause");
    return 0;
}
0
14.08.2014, 00:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.08.2014, 00:07
Привет! Вот еще темы с ответами:

Рекурсивная функция, логически проверяющая, что массив упорядочен по возрастанию - C++
Здравствуйте) Помогите, пожалуйста) Написать рекурсивную логическую функцию, которая проверяет что массив который передается в функцию...

Сохранить одну или несколько картинок в PDF - C++
столкнулся с дилемой. Требуется сохранить одну или несколько картинок в PDF (не кричите громко я сам в ужасе. Просто местное казначейство...

Как программно сжать директорию или несколько файлов? - C++
нужно программно сжать директорию или несколько файлов то что я нашел в сети сжимает только один файл подскажите если кто знает

Создать несколько классов или элементов класса в цикле - C++
Создать несколько классов в цикле или несколько элементов класса // ConsoleApplication3.cpp : Defines the entry point for the console...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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