Dadas dos strings donde la primera string puede contener caracteres comodín y la segunda string es una string normal. Escribe una función que devuelva verdadero si las dos strings coinciden. Los siguientes son caracteres comodín permitidos en la primera string.
* --> Matches with 0 or more instances of any character or set of characters. ? --> Matches with any one character.
Por ejemplo, «g*ks» coincide con «geeks». Y la string «ge?ks*» coincide con «geeksforgeeks» (nota ‘*’ al final de la primera string). Pero «g*k» no coincide con «gee» ya que el carácter ‘k’ no está presente en la segunda string.
C++
// A C program to match wild card characters #include <stdbool.h> #include <stdio.h> // The main function that checks if two given strings // match. The first string may contain wildcard characters bool match(char* first, char* second) { // If we reach at the end of both strings, we are done if (*first == '\0' && *second == '\0') return true; // Make sure to eliminate consecutive '*' if (*first == '*') { while (*(first + 1) == '*') first++; } // Make sure that the characters after '*' are present // in second string. This function assumes that the // first string will not contain two consecutive '*' if (*first == '*' && *(first + 1) != '\0' && *second == '\0') return false; // If the first string contains '?', or current // characters of both strings match if (*first == '?' || *first == *second) return match(first + 1, second + 1); // If there is *, then there are two possibilities // a) We consider current character of second string // b) We ignore current character of second string. if (*first == '*') return match(first + 1, second) || match(first, second + 1); return false; } // A function to run test cases void test(char* first, char* second) { match(first, second) ? puts("Yes") : puts("No"); } // Driver program to test above functions int main() { test("g*ks", "geeks"); // Yes test("ge?ks*", "geeksforgeeks"); // Yes test("g*k", "gee"); // No because 'k' is not in second test("*pqrs", "pqrst"); // No because 't' is not in first test("abc*bcd", "abcdhghgbcd"); // Yes test("abc*c?d", "abcd"); // No because second must have // 2 instances of 'c' test("*c*d", "abcd"); // Yes test("*?c*d", "abcd"); // Yes test("geeks**", "geeks"); // Yes return 0; }
Java
// Java program to match wild card characters class GFG { // The main function that checks if // two given strings match. The first string // may contain wildcard characters static boolean match(String first, String second) { // If we reach at the end of both strings, // we are done if (first.length() == 0 && second.length() == 0) return true; // Make sure to eliminate consecutive '*' if (first.length() > 1 &&first.charAt(0) == '*') { int i=0; while (i+1<first.length() && first.charAt(i+1) == '*') i++; first=first.substring(i); } // Make sure that the characters after '*' // are present in second string. // This function assumes that the first // string will not contain two consecutive '*' if (first.length() > 1 && first.charAt(0) == '*' && second.length() == 0) return false; // If the first string contains '?', // or current characters of both strings match if ((first.length() > 1 && first.charAt(0) == '?') || (first.length() != 0 && second.length() != 0 && first.charAt(0) == second.charAt(0))) return match(first.substring(1), second.substring(1)); // If there is *, then there are two possibilities // a) We consider current character of second string // b) We ignore current character of second string. if (first.length() > 0 && first.charAt(0) == '*') return match(first.substring(1), second) || match(first, second.substring(1)); return false; } // A function to run test cases static void test(String first, String second) { if (match(first, second)) System.out.println("Yes"); else System.out.println("No"); } // Driver Code public static void main(String[] args) { test("g*ks", "geeks"); // Yes test("ge?ks*", "geeksforgeeks"); // Yes test("g*k", "gee"); // No because 'k' is not in second test("*pqrs", "pqrst"); // No because 't' is not in first test("abc*bcd", "abcdhghgbcd"); // Yes test("abc*c?d", "abcd"); // No because second must have 2 // instances of 'c' test("*c*d", "abcd"); // Yes test("*?c*d", "abcd"); // Yes test("geeks**", "geeks"); // Yes } } // This code is contributed by // sanjeev2552
Python3
# Python program to match wild card characters # The main function that checks if two given strings match. # The first string may contain wildcard characters def match(first, second): # If we reach at the end of both strings, we are done if len(first) == 0 and len(second) == 0: return True # Make sure to eliminate consecutive '*' if len(first) > 1 and first[0] == '*': i = 0 while i+1 < len(first) and first[i+1] == '*': i = i+1 first = first[i:] # Make sure that the characters after '*' are present # in second string. This function assumes that the first # string will not contain two consecutive '*' if len(first) > 1 and first[0] == '*' and len(second) == 0: return False # If the first string contains '?', or current characters # of both strings match if (len(first) > 1 and first[0] == '?') or (len(first) != 0 and len(second) != 0 and first[0] == second[0]): return match(first[1:], second[1:]) # If there is *, then there are two possibilities # a) We consider current character of second string # b) We ignore current character of second string. if len(first) != 0 and first[0] == '*': return match(first[1:], second) or match(first, second[1:]) return False # A function to run test cases def test(first, second): if match(first, second): print("Yes") else: print("No") # Driver program test("g*ks", "geeks") # Yes test("ge?ks*", "geeksforgeeks") # Yes test("g*k", "gee") # No because 'k' is not in second test("*pqrs", "pqrst") # No because 't' is not in first test("abc*bcd", "abcdhghgbcd") # Yes test("abc*c?d", "abcd") # No because second must have 2 instances of 'c' test("*c*d", "abcd") # Yes test("*?c*d", "abcd") # Yes test("geeks**", "geeks") # Yes # This code is contributed by BHAVYA JAIN and ROHIT SIKKA
C#
// C# program to match wild card characters using System; class GFG { // The main function that checks if // two given strings match. The first string // may contain wildcard characters static bool match(String first, String second) { // If we reach at the end of both strings, // we are done if (first.Length == 0 && second.Length == 0) return true; // Make sure to eliminate consecutive '*' if (first.Length > 1 && first[0] == '*') { int i = 0; while (i + 1 < first.Length && first[i + 1] == '*') i++; first = first.Substring(i); } // Make sure that the characters after '*' // are present in second string. // This function assumes that the first // string will not contain two consecutive '*' if (first.Length > 1 && first[0] == '*' && second.Length == 0) return false; // If the first string contains '?', // or current characters of both strings match if ((first.Length > 1 && first[0] == '?') || (first.Length != 0 && second.Length != 0 && first[0] == second[0])) return match(first.Substring(1), second.Substring(1)); // If there is *, then there are two possibilities // a) We consider current character of second string // b) We ignore current character of second string. if (first.Length > 0 && first[0] == '*') return match(first.Substring(1), second) || match(first, second.Substring(1)); return false; } // A function to run test cases static void test(String first, String second) { if (match(first, second)) Console.WriteLine("Yes"); else Console.WriteLine("No"); } // Driver Code public static void Main(String[] args) { test("g*ks", "geeks"); // Yes test("ge?ks*", "geeksforgeeks"); // Yes test("g*k", "gee"); // No because 'k' is not in second test("*pqrs", "pqrst"); // No because 't' is not in first test("abc*bcd", "abcdhghgbcd"); // Yes test("abc*c?d", "abcd"); // No because second must // have 2 instances of 'c' test("*c*d", "abcd"); // Yes test("*?c*d", "abcd"); // Yes test("geeks**", "geeks"); // Yes } } // This code is contributed by Rajput-Ji
Javascript
<script> // Javascript program to match wild card characters // The main function that checks if // two given strings match. The first string // may contain wildcard characters function match(first, second) { // If we reach at the end of both strings, // we are done if (first.length == 0 && second.length == 0) return true; // Make sure that the characters after '*' // are present in second string. // This function assumes that the first // string will not contain two consecutive '*' if (first.length > 1 && first[0] == '*' && second.length == 0) return false; // If the first string contains '?', // or current characters of both strings match if ((first.length > 1 && first[0] == '?') || (first.length != 0 && second.length != 0 && first[0] == second[0])) return match(first.substring(1), second.substring(1)); // If there is *, then there are two possibilities // a) We consider current character of second string // b) We ignore current character of second string. if (first.length > 0 && first[0] == '*') return match(first.substring(1), second) || match(first, second.substring(1)); return false; } // A function to run test cases function test(first, second) { if (match(first, second)) document.write("Yes" + "<br>"); else document.write("No" + "<br>"); } // Driver code test("g*ks", "geeks"); // Yes test("ge?ks*", "geeksforgeeks"); // Yes test("g*k", "gee"); // No because 'k' is not in second test("*pqrs", "pqrst"); // No because 't' is not in first test("abc*bcd", "abcdhghgbcd"); // Yes test("abc*c?d", "abcd"); // No because second must have 2 // instances of 'c' test("*c*d", "abcd"); // Yes test("*?c*d", "abcd"); // Yes // This code is contributed by SoumikMondal </script>
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA