logo

Changer le sexe d'une chaîne donnée

Changez le sexe de la chaîne, c'est-à-dire basculez tous les mots spécifiques au sexe dans la chaîne d'entrée. 

Exemples :



  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.

Algorithme:

  • Maintenez une carte de hachage qui mappe tous les mots féminins aux mots masculins et tous les mots masculins aux mots féminins.
  • Ensuite, pour chaque mot de la chaîne, nous vérifions s'il s'agit d'un mot spécifique au genre ou non. Si c'est le cas, nous échangeons ce mot avec son homologue. Sinon, nous n'échangeons pas ce mot.
  • Tous les mots sont concaténés dans une nouvelle chaîne qui à la fin est imprimée et constitue notre chaîne requise.
CPP
// A C++ Program to change the gender of a string  #include    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);  }  
Java
import java.util.HashMap; import java.util.Map; public class ChangeGender {  // A Function that returns the new string with gender changed  public static String changeGender(String str)   {  // A Map to store the mapping of genders  // The user can add his words too.  Map<String String> dictionary = new HashMap<>();  dictionary.put('batman' 'batwoman');  dictionary.put('batwoman' 'batman');  dictionary.put('boy' 'girl');  dictionary.put('girl' 'boy');  dictionary.put('boyfriend' 'girlfriend');  dictionary.put('girlfriend' 'boyfriend');  dictionary.put('father' 'mother');  dictionary.put('mother' 'father');  dictionary.put('husband' 'wife');  dictionary.put('wife' 'husband');  dictionary.put('he' 'she');  dictionary.put('she' 'he');  dictionary.put('his' 'her');  dictionary.put('her' 'his');  dictionary.put('male' 'female');  dictionary.put('female' 'male');  dictionary.put('man' 'woman');  dictionary.put('woman' 'man');  dictionary.put('Mr' 'Ms');  dictionary.put('Ms' 'Mr');  dictionary.put('sir' 'madam');  dictionary.put('madam' 'sir');  dictionary.put('son' 'daughter');  dictionary.put('daughter' 'son');  dictionary.put('uncle' 'aunt');  dictionary.put('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.charAt(i) != ' ')  temp += str.charAt(i);  else {  // If this is a 'male' or a 'female' word then  // swap this with its counterpart  if (dictionary.containsKey(temp))  temp = dictionary.get(temp);  ans = ans + temp + ' ';  temp = '';  }  }  return ans;  }  // Driver Program to test above functions  public static void main(String[] args) {  String str = 'she is going to watch movie with her boyfriend';  System.out.println(changeGender(str));  } } 
Python
# A Python program to change the gender of a string # A Function that returns the new string with gender changed def change_gender(string): # A Dictionary to store the mapping of genders # The user can add his words too. 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' 'Ms': 'Mr' 'sir': 'madam' 'madam': 'sir' 'son': 'daughter' 'daughter': 'son' 'uncle': 'aunt' 'aunt': 'uncle' } string += ' ' # Append a space at the end n = len(string) # 'temp' string will hold the intermediate words # and 'ans' string will be our result temp = '' ans = '' for i in range(n): if string[i] != ' ': temp += string[i] else: # If this is a 'male' or a 'female' word then # swap this with its counterpart if temp in dictionary: temp = dictionary[temp] ans += temp + ' ' temp = '' return ans # Driver Program to test above functions if __name__ == '__main__': string = 'she is going to watch movie with her boyfriend' print(change_gender(string)) 
C#
using System; using System.Collections.Generic; class Program {  static string ChangeGender(string str)  {  // A Dictionary to store the mapping of genders  // The user can add his words too.  Dictionary<string string> dictionary = new Dictionary<string string>  {  { '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' } { 'Ms' 'Mr' }  { 'sir' 'madam' } { 'madam' 'sir' }  { 'son' 'daughter' } { 'daughter' 'son' }  { 'uncle' 'aunt' } { 'aunt' 'uncle' }  };  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 += str[i];  }  else  {  // If this is a 'male' or a 'female' word then  // swap this with its counterpart  if (dictionary.ContainsKey(temp))  {  temp = dictionary[temp];  }  ans += temp + ' ';  temp = '';  }  }  return ans;  }  static void Main(string[] args)  {  string str = 'she is going to watch movie with her boyfriend';  Console.WriteLine(ChangeGender(str));  Console.ReadKey();  } } 
JavaScript
// A Function that returns the new string with gender  // changed  function changeGender(str) {  // A Dictionary to store the mapping of genders  // The user can add his words too.  const dictionary = new Map([  ['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'] ['Ms' 'Mr']  ['sir' 'madam'] ['madam' 'sir']  ['son' 'daughter'] ['daughter' 'son']  ['uncle' 'aunt'] ['aunt' 'uncle']  ]);  str = str + ' '; // Append a space at the end  const n = str.length;  // 'temp' string will hold the intermediate words  // and 'ans' string will be our result  let temp = '' ans = '';  for (let i = 0; i <= n - 1; i++) {  if (str[i] != ' ')  temp += str[i];  else {  // If this is a 'male' or a 'female' word then  // swap this with its counterpart  if (dictionary.has(temp))  temp = dictionary.get(temp);  ans = ans + temp + ' ';  temp = '';  }  }  return (ans); } // Driver Program to test above function const str = 'she is going to watch movie with her boyfriend'; console.log(changeGender(str)); 

Sortir
he is going to watch movie with his girlfriend 

Complexité temporelle : O(N^2) où N est la longueur de la chaîne car l'opérateur '+'/'append' de la chaîne peut prendre jusqu'à O(N) temps et en supposant que la recherche dans le dictionnaire prend O(1) dans le pire des cas. 

instanciation de Java

Espace auxiliaire : Outre le dictionnaire qui mappe tous les mots sur son homologue, nous déclarons un espace O(N) pour la nouvelle chaîne où N est la longueur de la chaîne d'entrée. 



Possibilités d'amélioration :

  • Nous pouvons ajouter plus de mots et leurs équivalents dans le dictionnaire pour augmenter la précision du programme. Par exemple, nous pouvons ajouter – acteur actrice dieu déesse à notre dictionnaire.
  • Un fichier texte contenant tous les mots féminins et masculins peut également être importé.
  • Le programme peut être modifié pour ne plus être sensible à la casse.