Open In App

Change gender of a given string

Improve
Improve
Like Article
Like
Save
Share
Report

Change gender of string i.e toggle all the gender-specific words in the input string. 

Examples:

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.

Algorithm:

  • Maintain a hash-map which maps all the “female” words to the “male” words and all the “male” words to “female” ones.
  • Then for each word in the string, we check whether this is a gender-specific word or not. If it is then we swap this word with its counterpart word. Else we don’t swap this word.
  • All the words gets concatenated in a new string, which at the end is printed and is our required string.

CPP




// 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);
}


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));


Output

he is going to watch movie with his girlfriend 

Time Complexity: O(N^2), where N is the length of the string, as the ‘+’/ ‘append’ operator of the string can take upto O(N) time and assuming that lookup in the dictionary takes O(1) worse case time. 

Auxiliary Space: Apart from the dictionary that maps all the words to its counterpart, we declare O(N) space for the new string, where N is the length of input string. 

Scope for Improvement:

  • We can add more words and their counterparts in the dictionary to increase the accuracy of the program. For example, we can add – “actor , actress” , “god , goddess” to our dictionary.
  • A text file of words of all female and male words can also be imported.
  • The program can be modified to become case insensitive.


Last Updated : 30 Mar, 2023
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads