Escriba una función C eficiente que tome dos strings como argumentos y elimine los caracteres de la primera string que están presentes en la segunda string (string de máscara).
Le recomendamos encarecidamente que haga clic aquí y lo practique antes de pasar a la solución.
Algoritmo: Deje que la primera string de entrada sea una «string de prueba» y la string que tiene caracteres para eliminar de la primera string sea una «máscara»
C++
// C++ program to remove duplicates, the order of // characters is not maintained in this progress #include <bits/stdc++.h> #define NO_OF_CHAR 256 using namespace std; int* getcountarray(string str2) { int* count = (int*)calloc(sizeof(int), NO_OF_CHAR); for (int i = 0; i < str2.size(); i++) { count[str2[i]]++; } return count; } /* removeDirtyChars takes two string as arguments: First string (str1) is the one from where function removes dirty characters. Second string(str2) is the string which contain all dirty characters which need to be removed from first string */ string removeDirtyChars(string str1, string str2) { // str2 is the string // which is to be removed int* count = getcountarray(str2); string res; // ip_idx helps to keep // track of the first string int ip_idx = 0; while (ip_idx < str1.size()) { char temp = str1[ip_idx]; if (count[temp] == 0) { res.push_back(temp); } ip_idx++; } return res; } // Driver Code int main() { string str1 = "geeksforgeeks"; string str2 = "mask"; // Function call cout << removeDirtyChars(str1, str2) << endl; }
C
#include <stdio.h> #include <stdlib.h> #define NO_OF_CHARS 256 /* Returns an array of size 256 containing count of characters in the passed char array */ int* getCharCountArray(char* str) { int* count = (int*)calloc(sizeof(int), NO_OF_CHARS); int i; for (i = 0; *(str + i); i++) count[*(str + i)]++; return count; } /* removeDirtyChars takes two string as arguments: First string (str) is the one from where function removes dirty characters. Second string is the string which contain all dirty characters which need to be removed from first string */ char* removeDirtyChars(char* str, char* mask_str) { int* count = getCharCountArray(mask_str); int ip_ind = 0, res_ind = 0; while (*(str + ip_ind)) { char temp = *(str + ip_ind); if (count[temp] == 0) { *(str + res_ind) = *(str + ip_ind); res_ind++; } ip_ind++; } /* After above step string is ngring. Removing extra "iittg" after string*/ *(str + res_ind) = '\0'; return str; } /* Driver code*/ int main() { char str[] = "geeksforgeeks"; char mask_str[] = "mask"; printf("%s", removeDirtyChars(str, mask_str)); return 0; }
Java
// Java program to remove duplicates, the order of // characters is not maintained in this program public class GFG { static final int NO_OF_CHARS = 256; /* Returns an array of size 256 containing count of characters in the passed char array */ static int[] getCharCountArray(String str) { int count[] = new int[NO_OF_CHARS]; for (int i = 0; i < str.length(); i++) count[str.charAt(i)]++; return count; } /* removeDirtyChars takes two string as arguments: First string (str) is the one from where function removes dirty characters. Second string is the string which contain all dirty characters which need to be removed from first string */ static String removeDirtyChars(String str, String mask_str) { int count[] = getCharCountArray(mask_str); int ip_ind = 0, res_ind = 0; char arr[] = str.toCharArray(); while (ip_ind != arr.length) { char temp = arr[ip_ind]; if (count[temp] == 0) { arr[res_ind] = arr[ip_ind]; res_ind++; } ip_ind++; } str = new String(arr); /* After above step string is ngring. Removing extra "iittg" after string*/ return str.substring(0, res_ind); } // Driver Code public static void main(String[] args) { String str = "geeksforgeeks"; String mask_str = "mask"; System.out.println(removeDirtyChars(str, mask_str)); } }
Python3
# Python program to remove characters # from first string which # are present in the second string NO_OF_CHARS = 256 # Utility function to convert # from string to list def toList(string): temp = [] for x in string: temp.append(x) return temp # Utility function to # convert from list to string def toString(List): return ''.join(List) # Returns an array of size # 256 containing count of characters # in the passed char array def getCharCountArray(string): count = [0] * NO_OF_CHARS for i in string: count[ord(i)] += 1 return count # removeDirtyChars takes two # string as arguments: First # string (str) is the one # from where function removes dirty # characters. Second string # is the string which contain all # dirty characters which need # to be removed from first string def removeDirtyChars(string, mask_string): count = getCharCountArray(mask_string) ip_ind = 0 res_ind = 0 temp = '' str_list = toList(string) while ip_ind != len(str_list): temp = str_list[ip_ind] if count[ord(temp)] == 0: str_list[res_ind] = str_list[ip_ind] res_ind += 1 ip_ind += 1 # After above step string is ngring. # Removing extra "iittg" after string return toString(str_list[0:res_ind]) # Driver code mask_string = "mask" string = "geeksforgeeks" print(removeDirtyChars(string, mask_string)) # This code is contributed by Bhavya Jain
C#
// C# program to remove // duplicates, the order // of characters is not // maintained in this program using System; class GFG { static int NO_OF_CHARS = 256; /* Returns an array of size 256 containing count of characters in the passed char array */ static int[] getCharCountArray(String str) { int[] count = new int[NO_OF_CHARS]; for (int i = 0; i < str.Length; i++) count[str[i]]++; return count; } /* removeDirtyChars takes two string as arguments: First string (str) is the one from where function removes dirty characters. Second string is the string which contain all dirty characters which need to be removed from first string */ static String removeDirtyChars(String str, String mask_str) { int[] count = getCharCountArray(mask_str); int ip_ind = 0, res_ind = 0; char[] arr = str.ToCharArray(); while (ip_ind != arr.Length) { char temp = arr[ip_ind]; if (count[temp] == 0) { arr[res_ind] = arr[ip_ind]; res_ind++; } ip_ind++; } str = new String(arr); /* After above step string is ngring. Removing extra "iittg" after string*/ return str.Substring(0, res_ind); } // Driver Code public static void Main() { String str = "geeksforgeeks"; String mask_str = "mask"; Console.WriteLine(removeDirtyChars(str, mask_str)); } } // This code is contributed by mits
Javascript
<script> //Javascript Implementation let NO_OF_CHARS = 256; function getcountarray(str2) { var count = new Array(NO_OF_CHARS).fill(0); for (var i = 0; i < str2.length; i++) { count[str2.charCodeAt(i)]++; } return count; } /* removeDirtyChars takes two string as arguments: First string (str1) is the one from where function removes dirty characters. Second string(str2) is the string which contain all dirty characters which need to be removed from first string */ function removeDirtyChars(str1, str2) { // str2 is the string // which is to be removed var count = getcountarray(str2); var res =""; // ip_idx helps to keep // track of the first string var ip_idx = 0; while (ip_idx < str1.length) { var temp = str1[ip_idx]; if (count[temp.charCodeAt(0)] == 0) { res = res.concat(temp); } ip_idx++; } return res; } // Driver Code var mask_string = "mask" var string = "geeksforgeeks" document.write(removeDirtyChars(string, mask_string)); // This code is contributed by shivani </script>
C++
// C++ program to remove duplicates #include <bits/stdc++.h> using namespace std; string removeChars(string string1, string string2) { //we extract every character of string string 2 for(auto i:string2) { //we find char exit or not while(find(string1.begin(),string1.end(),i)!=string1.end()) { auto itr = find(string1.begin(),string1.end(),i); //if char exit we simply remove that char string1.erase(itr); } } return string1; } // Driver Code int main() { string string1,string2; string1="geeksforgeeks"; string2="mask"; cout<< removeChars(string1,string2)<<endl;; return 0; }
Java
/*package whatever //do not write package name here */ import java.io.*; class GFG { public static String removeChars(String string1, String string2) { // we extract every character of string string 2 for (int index = 0; index < string2.length(); index++) { char i = string2.charAt(index); // we find char exit or not while (string1.contains(i + "")) { int itr = string1.indexOf(i); // if char exit we simply remove that char string1 = string1.replace((i + ""), ""); } } return string1; } // Driver Code public static void main(String[] args) { String string1, string2; string1 = "geeksforgeeks"; string2 = "mask"; System.out.println(removeChars(string1, string2)); } } //This code is contributed by KaaL-EL.
Python3
# Python 3 program to remove duplicates def removeChars(string1, string2): # we extract every character of string string 2 for i in string2: # we find char exit or not while i in string1: itr = string1.find(i) # if char exit we simply remove that char string1 = string1.replace(i, '') return string1 # Driver Code if __name__ == "__main__": string1 = "geeksforgeeks" string2 = "mask" print(removeChars(string1, string2)) # This code is contributed by ukasp.
Javascript
<script> // JavaScript program to remove duplicates function removeChars(string1, string2){ // we extract every character of string string 2 for(let i of string2){ // we find char exit or not while(string1.indexOf(i) != -1){ let itr = string1.indexOf(i) // if char exit we simply remove that char string1 = string1.replace(i, '') } } return string1 } // Driver Code let string1 = "geeksforgeeks" let string2 = "mask" document.write(removeChars(string1, string2)) // This code is contributed by shinjanpatra </script>
C++
// C++ program to remove duplicates #include <bits/stdc++.h> using namespace std; char* removeChars(char* s1, int n1, char* s2, int n2) { int arr[26] = { 0 }; // an array of size 26 to count the frequency of characters int curr = 0; for (int i = 0; i < n2; i++) // assigned all the index of characters which are present arr[s2[i] - 'a'] = -1; // in second string by -1 (just flagging) for (int i = 0; i < n1; i++) if (arr[s1[i] - 'a'] != -1) { // Checking if the index of characters don't have -1 s1[curr] = s1[i]; // i.e, that character was not present in second string curr++; // and then storing that character in string } s1[curr] = '\0'; // marking last character as null to point the end of string return s1; } // driver code int main() { char string1[] = "geeksforgeeks"; char string2[] = "mask"; int n1 = sizeof(string1) / sizeof(string1[0]); int n2 = sizeof(string2) / sizeof(string2[0]); cout << removeChars(string1, n1, string2, n2) << endl; return 0; }
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