Eliminar caracteres de la primera string que están presentes en la segunda string

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *