Cambiar el género de una string dada

Cambie el género de la string, es decir, alterne todas las palabras específicas de género en la string de entrada.
Ejemplos:

Input:  “she is my sister” 
Output:  “he is my brother”.
There are two gender-specific words in this
sentence:“she” and “sister”. After toggling
gender specific words to their respective 
counterparts - “he” and “brother” :
Gender specific words of the string are now 
changed.

Algoritmo:

  • Mantenga un mapa hash que mapee todas las palabras «femeninas» a las palabras «masculinas» y todas las palabras «masculinas» a las «femeninas».
  • Luego, para cada palabra en la string, verificamos si se trata de una palabra específica de género o no. Si es así, intercambiamos esta palabra con su contraparte. De lo contrario, no intercambiamos esta palabra.
  • Todas las palabras se concatenan en una nueva string, que al final se imprime y es nuestra string requerida.
// A C++ Program to change the gender of a string
#include<bits/stdc++.h>
using namespace std;
  
// A Function that returns the new string with gender
// changed
string changeGender(string str)
{
    // A Dictionary to store the mapping of genders
    // The user can add his words too.
    unordered_multimap <string, string> dictionary =
    {
      {"batman", "batwoman"}, {"batwoman", "batman"},
      {"boy", "girl"}, {"girl", "boy"},
      {"boyfriend", "girlfriend"}, {"girlfriend", "boyfriend"},
      {"father", "mother"}, {"mother", "father"},
      {"husband", "wife"}, {"wife", "husband"},
      {"he", "she"}, {"she", "he"},
      {"his", "her"}, {"her", "his"},
      {"male", "female"}, {"female", "male"},
      {"man", "woman"}, {"woman", "man"},
      {"Mr", "Ms"}, {"Mr", "Ms"},
      {"sir", "madam"}, {"madam", "sir"},
      {"son", "daughter"}, {"daughter", "son"},
      {"uncle", "aunt"}, {"aunt", "uncle"},
    };
  
    str = str + ' '; // Append a space at the end
  
    int n = str.length();
  
    // 'temp' string will hold the intermediate words
    // and 'ans' string will be our result
    string temp = "", ans = "";
  
    for (int i=0; i<=n-1; i++)
    {
        if (str[i] != ' ')
            temp.push_back(str[i]);
        else
        {
            // If this is a 'male' or a 'female' word then
            // swap this with its counterpart
            if (dictionary.find(temp) != dictionary.end())
                temp = dictionary.find(temp)->second;
  
            ans = ans + temp + ' ';
            temp.clear();
        }
    }
  
    return(ans);
}
  
// Driver Program to test above functions
int main()
{
    string str = "she is going to watch movie with"
                " her boyfriend";
  
    cout << changeGender(str);
  
    return (0);
}

Complejidad de tiempo: O(N^2), donde N es la longitud de la string, ya que el operador ‘+’/’agregar’ de la string puede tomar hasta O(N) tiempo y suponiendo que la búsqueda en el diccionario toma O( 1) tiempo del peor de los casos.

Espacio auxiliar: además del diccionario que asigna todas las palabras a su contraparte, declaramos espacio O(N) para la nueva string, donde N es la longitud de la string de entrada.

Alcance de mejora:

  • Podemos agregar más palabras y sus equivalentes en el diccionario para aumentar la precisión del programa. Por ejemplo, podemos agregar – “actor, actriz”, “dios, diosa” a nuestro diccionario.
  • También se puede importar un archivo de texto de palabras de todas las palabras femeninas y masculinas.
  • El programa se puede modificar para que no distinga entre mayúsculas y minúsculas.

Este artículo es una contribución de Rachit Belwariar . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

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 *