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