logo

주어진 문자열의 성별 변경

문자열의 성별을 변경합니다. 즉, 입력 문자열에서 모든 성별 관련 단어를 전환합니다. 

정규식 자바 란 무엇입니까?

예:



  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.

연산:

  • 모든 여성 단어를 남성 단어로 매핑하고 모든 남성 단어를 여성 단어로 매핑하는 해시 맵을 유지 관리합니다.
  • 그런 다음 문자열의 각 단어에 대해 이것이 성별에 따른 단어인지 아닌지 확인합니다. 그렇다면 이 단어를 상대 단어로 바꿉니다. 그렇지 않으면 이 단어를 바꾸지 않습니다.
  • 모든 단어는 마지막에 인쇄되는 필수 문자열인 새 문자열로 연결됩니다.
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)); 

산출
he is going to watch movie with his girlfriend 

시간 복잡도: O(N^2) 여기서 N은 문자열의 길이입니다. 문자열의 '+'/ '추가' 연산자는 최대 O(N) 시간이 걸릴 수 있으며 사전에서 조회하는 데 O(1) 최악의 경우 시간이 걸린다고 가정합니다. 

보조 공간: 모든 단어를 해당 단어에 매핑하는 사전과는 별도로 새 문자열에 대해 O(N) 공간을 선언합니다. 여기서 N은 입력 문자열의 길이입니다. 



2차원 배열을 위한 C 프로그램

개선 범위:

  • 프로그램의 정확성을 높이기 위해 더 많은 단어와 해당 단어를 사전에 추가할 수 있습니다. 예를 들어, 배우 배우 신 여신을 사전에 추가할 수 있습니다.
  • 모든 여성 및 남성 단어의 텍스트 파일을 가져올 수도 있습니다.
  • 대소문자를 구분하지 않도록 프로그램을 수정할 수 있습니다.