Open In App

Replace all occurrences of character X with character Y in given string

Last Updated : 05 Apr, 2023
Improve
Improve
Like Article
Like
Save
Share
Report

Given a string str and two characters X and Y, the task is to write a recursive function to replace all occurrences of character X with character Y.

Examples: 

Input: str = abacd, X = a, Y = x 
Output: xbxcd

Input: str = abacd, X = e, Y = y 
Output: abacd  

 

Iterative Approach: The idea is to iterate over the given string and if any character X is found then replace that character with Y.

Code-

C++




// C++ program for the above approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to replace all occurrences
// of character c1 with character c2
void replaceCharacter(char* str, char c1, char c2)
{
 
    int j, n = strlen(str);
    for (int i = j = 0; i < n; i++) {
        if (str[i] != c1) {
            str[j++] = str[i];
        }
        else {
            str[j++] = c2;
        }
    }
 
    str[j] = '\0';
}
 
// Driver Code
int main()
{
    // Given string
    char str[] = "abacd";
    char c1 = 'a';
    char c2 = 'x';
 
    // Function call
    replaceCharacter(str, c1, c2);
 
    // Print the string
    cout << str;
    return 0;
}


Java




public class Main {
    // Function to replace all occurrences
    // of character c1 with character c2
    static void replaceCharacter(char[] str, char c1, char c2) {
        int j = 0;
        int n = str.length;
        for (int i = 0; i < n; i++) {
            if (str[i] != c1) {
                str[j++] = str[i];
            } else {
                str[j++] = c2;
            }
        }
    }
 
    public static void main(String[] args) {
        // Given string
        char[] str = "abacd".toCharArray();
        char c1 = 'a';
        char c2 = 'x';
 
        // Function call
        replaceCharacter(str, c1, c2);
 
        // Print the string
        System.out.println(str);
    }
}


Python3




# Function to replace all occurrences
# of character c1 with character c2
def replaceCharacter(str, c1, c2):
    n = len(str)
    res = ""
    for i in range(n):
        if str[i] != c1:
            res += str[i]
        else:
            res += c2
    return res
 
# Driver Code
if __name__ == '__main__':
    # Given string
    str = "abacd"
    c1 = 'a'
    c2 = 'x'
 
    # Function call
    str = replaceCharacter(str, c1, c2)
 
    # Print the string
    print(str)


C#




using System;
 
public class MainClass
{
   
  // Function to replace all occurrences
  // of character c1 with character c2
  static void ReplaceCharacter(char[] str, char c1, char c2)
  {
    int j = 0;
    int n = str.Length;
    for (int i = 0; i < n; i++)
    {
      if (str[i] != c1)
      {
        str[j++] = str[i];
      }
      else
      {
        str[j++] = c2;
      }
    }
  }
 
  public static void Main(string[] args)
  {
     
    // Given string
    char[] str = "abacd".ToCharArray();
    char c1 = 'a';
    char c2 = 'x';
 
    // Function call
    ReplaceCharacter(str, c1, c2);
 
    // Print the string
    Console.WriteLine(str);
  }
}


Javascript




// Function to replace all occurrences
// of character c1 with character c2
function replaceCharacter(str, c1, c2) {
    let result = "";
    for (let i = 0; i < str.length; i++) {
        if (str[i] != c1) {
            result += str[i];
        } else {
            result += c2;
        }
    }
    return result;
}
 
// Given string
let str = "abacd";
let c1 = 'a';
let c2 = 'x';
 
// Function call
let newStr = replaceCharacter(str, c1, c2);
 
// Print the string
console.log(newStr);


Output-

xbxcd

Time Complexity: O(N), as we are using a loop to traverse N times so it will cost us O(N) time.
Auxiliary Space: O(1), as we are not using any extra space.

Recursive Approach: The idea is to recursively traverse the given string and replace the character with value X with Y. Below are the steps:

  1. Get the string str, character X, and Y.
  2. Recursively Iterate from index 0 to string length.
    • Base Case: If we reach the end of the string the exit from the function. 
       
if(str[0]=='\0')
   return ;
  • Recursive Call: If the base case is not met, then check for the character at 0th index if it is X then replace that character with Y and recursively iterate for next character. 
     
if(str[0]==X) 
  str[0] = Y
  • Return Statement: At each recursive call(except the base case), return the recursive function for the next iteration. 
     
return recursive_function(str + 1, X, Y)

Below is the recursive implementation:

C++




// C++ program for the above approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to replace all occurrences
// of character c1 with character c2
void replaceCharacter(char input[],
                    char c1, char c2)
{
    // Base Case
    // If the string is empty
    if (input[0] == '\0') {
        return;
    }
 
    // If the character at starting
    // of the given string is equal
    // to c1, replace it with c2
    if (input[0] == c1) {
        input[0] = c2;
    }
 
    // Getting the answer from recursion
    // for the smaller problem
    return replaceCharacter(input + 1,
                            c1, c2);
}
 
// Driver Code
int main()
{
    // Given string
    char str[] = "abacd";
    char c1 = 'a';
    char c2 = 'x';
 
    // Function call
    replaceCharacter(str, c1, c2);
 
    // Print the string
    cout << str;
    return 0;
}


Java




// Java program for the above approach
import java.util.*;
import java.io.*;
 
class GFG{
     
// Function to replace all occurrences
// of character c1 with character c2
static String replaceCharacter(String str,
                             char c1, char c2)
{
    // Base Case
    // If the string is empty
    if (str.length() == 1)
    {
        return str;
    }
    char x=str.charAt(0);
    // If the character at starting
    // of the given string is equal
    // to c1, replace it with c2
    if (str.charAt(0) == c1)
    {
        x=c2;
        str = c2+str.substring(1);
    }
 
    // Getting the answer from recursion
    // for the smaller problem
    return x+replaceCharacter(str.substring(1),
                            c1, c2);
}
 
// Driver Code
public static void main(String[] args)
{
     
    // Given string
    String str = "abacd";
    char c1 = 'a';
    char c2 = 'x';
 
    // Function call
    System.out.println(replaceCharacter(str, c1, c2));
}
}
 
// This code is contributed by cyrus18


Python3




# Python3 program for the above approach
 
# Function to replace all occurrences
# of character c1 with character c2
def replaceCharacter(input, c1, c2):
     
    input = list(str)
     
    # If the character at starting
    # of the given string is equal
    # to c1, replace it with c2
    for i in range(0, len(str)):
        if (input[i] == c1):
            input[i] = c2;
             
        # Print the string
        print(input[i], end = "")
     
# Driver Code
 
# Given string
str = "abacd"
c1 = 'a'
c2 = 'x'
 
# Function call
replaceCharacter(str, c1, c2);
 
# This code is contributed by sanjoy_62


C#




// C# program for the above approach
using System;
 
class GFG{
     
// Function to replace all occurrences
// of character c1 with character c2
static void replaceCharacter(string str,
                             char c1, char c2)
{
    char[] input = str.ToCharArray();
 
    // If the character at starting
    // of the given string is equal
    // to c1, replace it with c2
    for(int i = 0; i < str.Length; i++)
    {
        if (input[i] == c1)
        {
            input[i] = c2;
        }
     
        // Print the string
        Console.Write(input[i]);
    }
}
 
// Driver Code
public static void Main()
{
     
    // Given string
    string str = "abacd";
    char c1 = 'a';
    char c2 = 'x';
 
    // Function call
    replaceCharacter(str, c1, c2);
}
}
 
// This code is contributed by sanjoy_62


Javascript




<script>
// javascript program for the above approach
 
     
// Function to replace all occurrences
// of character c1 with character c2
function replaceCharacter(str,c1, c2)
{
    // Base Case
    // If the string is empty
    if (str.length == 1)
    {
        return str;
    }
    var x=str.charAt(0);
    // If the character at starting
    // of the given string is equal
    // to c1, replace it with c2
    if (str.charAt(0) == c1)
    {
        x=c2;
        str = c2+str.substring(1);
    }
 
    // Getting the answer from recursion
    // for the smaller problem
    return x+replaceCharacter(str.substring(1),
                            c1, c2);
}
 
// Driver Code
//Given string
var str = "abacd";
var c1 = 'a';
var c2 = 'x';
 
// Function call
document.write(replaceCharacter(str, c1, c2));
 
// This code is contributed by 29AjayKumar
</script>


Output

xbxcd

Time Complexity: O(N), as we are using a loop to traverse N times so it will cost us O(N) time, where N is the length of the string.
Auxiliary Space: O(N), due to recursive stack space.



Like Article
Suggest improvement
Share your thoughts in the comments