Эффективные способы сравнения переменной с несколькими значениями
В этой статье мы обсудим способы сравнения переменной со значениями.
Метод 1. Идея состоит в том, чтобы сравнивать каждую переменную индивидуально со всеми множественными значениями одновременно.
Программа 1:
C ++
// C++ program to compare one variable // with multiple variable #include <iostream> using namespace std; // Driver Code int main() { // Variable to be compared char character = 'a' ; // Compare the given variable // with vowel using || operator // Check for vowel if (character == ( 'a' || 'e' || 'i' || 'o' || 'u' )) { cout << "Vowel" ; } // Otherwise Consonant else { cout << "Consonant" ; } return 0; } |
Джава
// Java program to compare one variable // with multiple variable import java.util.*; class GFG { // Driver Code public static void main(String[] args) { // Variable to be compared char character = 'a' ; // Compare the given variable // with vowel using || operator // Check for vowel if (character == ( 'a' || 'e' || 'i' || 'o' || 'u' )) { System.out.print( "Vowel" ); } // Otherwise Consonant else { System.out.print( "Consonant" ); } } } // This code is contributed by Rajput-Ji |
Python3
# Python program to compare one variable # with multiple variable # Driver Code if __name__ = = '__main__' : # Variable to be compared character = 'a' ; # Compare the given variable # with vowel using or operator # Check for vowel if (character = = ( 'a' or 'e' or 'i' or 'o' or 'u' )): print ( "Vowel" ); # Otherwise Consonant else : print ( "Consonant" ); # This code contributed by shikhasingrajput |
C #
// C# program to compare one variable // with multiple variable using System; class GFG { // Driver Code public static void Main(String[] args) { // Variable to be compared char character = 'a' ; // Compare the given variable // with vowel using || operator // Check for vowel if (character == ( 'a' || 'e' || 'i' || 'o' || 'u' )) { Console.Write( "Vowel" ); } // Otherwise Consonant else { Console.Write( "Consonant" ); } } } // This code is contributed by 29AjayKumar |
Согласный
Объяснение:
Приведенный выше код дает неправильный ответ или ошибку, так как сравнение переменных указанным выше способом неверно, и он вынужден кодировать следующим образом:
Метод 2 - использование битовой маски: Другой подход состоит в том, чтобы проверить несколько групп значений, а затем создать битовую маску значений, а затем проверить, установлен ли этот бит.
Программа 2:
C ++
// C++ program to compare a value // with multiple values #include <iostream> using namespace std; // Driver Code int main() { // Create bitmasks unsigned group_1 = (1 << 1) | (1 << 2) | (1 << 3); unsigned group_2 = (1 << 4) | (1 << 5) | (1 << 6); unsigned group_3 = (1 << 7) | (1 << 8) | (1 << 9); // Values to be checked int value_to_check = 9; // Checking with created bitmask if ((1 << value_to_check) & group_1) { cout << "found a match in group 1" ; } if ((1 << value_to_check) & group_2) { cout << "found a match in group 2" ; } if ((1 << value_to_check) & group_3) { cout << "found a match in group 3" ; } return 0; } |
Джава
// Java program to compare a value // with multiple values import java.util.*; class GFG{ // Driver Code public static void main(String[] args) { // Create bitmasks int group_1 = ( 1 << 1 ) | ( 1 << 2 ) | ( 1 << 3 ); int group_2 = ( 1 << 4 ) | ( 1 << 5 ) | ( 1 << 6 ); int group_3 = ( 1 << 7 ) | ( 1 << 8 ) | ( 1 << 9 ); // Values to be checked int value_to_check = 9 ; // Checking with created bitmask if ((( 1 << value_to_check) & group_1) > 0 ) { System.out.print( "found a match " + "in group 1" ); } if ((( 1 << value_to_check) & group_2) > 0 ) { System.out.print( "found a match " + "in group 2" ); } if ((( 1 << value_to_check) & group_3) > 0 ) { System.out.print( "found a match " + "in group 3" ); } } } // This code is contributed by shikhasingrajput |
Python3
# Python3 program to compare a value # with multiple values # Driver Code if __name__ = = '__main__' : # Create bitmasks group_1 = ( 1 << 1 ) | ( 1 << 2 ) | ( 1 << 3 ) group_2 = ( 1 << 4 ) | ( 1 << 5 ) | ( 1 << 6 ) group_3 = ( 1 << 7 ) | ( 1 << 8 ) | ( 1 << 9 ) # Values to be checked value_to_check = 9 # Checking with created bitmask if ((( 1 << value_to_check) & group_1) > 0 ): print ( "found a match " + "in group 1" ) if ((( 1 << value_to_check) & group_2) > 0 ): print ( "found a match " + "in group 2" ) if ((( 1 << value_to_check) & group_3) > 0 ): print ( "found a match " + "in group 3" ) # This code is contributed by gauravrajput1 |
C #
// C# program to compare a value // with multiple values using System; class GFG{ // Driver Code public static void Main(String[] args) { // Create bitmasks int group_1 = (1 << 1) | (1 << 2) | (1 << 3); int group_2 = (1 << 4) | (1 << 5) | (1 << 6); int group_3 = (1 << 7) | (1 << 8) | (1 << 9); // Values to be checked int value_to_check = 9; // Checking with created // bitmask if (((1 << value_to_check) & group_1) > 0) { Console.Write( "found a match " + "in group 1" ); } if (((1 << value_to_check) & group_2) > 0) { Console.Write( "found a match " + "in group 2" ); } if (((1 << value_to_check) & group_3) > 0) { Console.Write( "found a match " + "in group 3" ); } } } // This code is contributed by gauravrajput1 |
нашел совпадение в группе 3
Примечание . Этот подход лучше всего работает для значений, не превышающих естественный размер вашего процессора. В наше время, как правило, было бы 64. Общее решение этой проблемы с использованием Template из C ++ 11. Ниже представлена программа для того же:
Программа 3:
C ++
// C++ program for comparing variable // with multiples variable #include <algorithm> #include <initializer_list> #include <iostream> using namespace std; template < typename T> // Function that checks given variable // v in the list lst[] bool is_in( const T& v, std::initializer_list<T> lst) { return (std::find(std::begin(lst), std::end(lst), v) != std::end(lst)); } // Driver Code int main() { // Number to be compared int num = 10; // Compare with multiple variables if (is_in(num, { 1, 2, 3 })) cout << "Found in group" << endl; else cout << "Not in group" << endl; // Character to be compared char c = 'a' ; // Compare with multiple variables if (is_in(c, { 'x' , 'a' , 'c' })) cout << "Found in group" << endl; else cout << "Not in group" << endl; return 0; } |
Не в группе Найдено в группе
Примечание : это не очень эффективно, если не используется с примитивными типами. Для std :: string это вызовет ошибку. Эта задача стала действительно простой с C ++ 17, поскольку он поставляется с Fold Expression. Обычно это называется сворачиванием, которое помогает выразить ту же идею с меньшим количеством кода и хорошо работает с любым типом данных. Здесь «||» , чтобы свести все логические результаты к одному, который является ложным только в том случае, если все результаты сравнения ложны . Ниже представлена программа для того же:
Программа 4:
C ++
// C++ program for comparing variable // with multiple variables #include <algorithm> #include <initializer_list> #include <iostream> #include <string> using namespace std; template < typename First, typename ... T> // Function that checks given variable // first in the list t[] bool is_in(First&& first, T&&... t) { return ((first == t) || ...); } // Driver Code int main() { // Number to be compared int num = 10; // Compare using template if (is_in(num, 1, 2, 3)) cout << "Found in group" << endl; else cout << "Not in group" << endl; // String to be compared string c = "abc" ; // Compare using template if (is_in(c, "xyz" , "bhy" , "abc" )) cout << "Found in group" << endl; else cout << "Not in group" << endl; return 0; } |
Выход: