Skip to content
Related Articles

Related Articles

C program to Replace a word in a text by another given word

Improve Article
Save Article
  • Difficulty Level : Medium
  • Last Updated : 26 Oct, 2022
Improve Article
Save Article

Given three strings ‘str’, ‘oldW’ and ‘newW’. The task is find all occurrences of the word ‘oldW’ and replace then with word ‘newW’. Examples:

Input : str[] = "xxforxx xx for xx", 
        oldW[] = "xx", 
        newW[] = "geeks"
Output : geeksforgeeks geeks for geeks

The idea is to traverse the original string and count the number of times old word occurs in the string. Now make a new string of sufficient size so that new word can be replaced. Now copy original string to new string with replacement of word. 

Implementation:

C




// C program to search and replace 
// all occurrences of a word with 
// other word. 
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
  
// Function to replace a string with another 
// string 
char* replaceWord(const char* s, const char* oldW, 
                const char* newW) 
    char* result; 
    int i, cnt = 0; 
    int newWlen = strlen(newW); 
    int oldWlen = strlen(oldW); 
  
    // Counting the number of times old word 
    // occur in the string 
    for (i = 0; s[i] != '\0'; i++) { 
        if (strstr(&s[i], oldW) == &s[i]) { 
            cnt++; 
  
            // Jumping to index after the old word. 
            i += oldWlen - 1; 
        
    
  
    // Making new string of enough length 
    result = (char*)malloc(i + cnt * (newWlen - oldWlen) + 1); 
  
    i = 0; 
    while (*s) { 
        // compare the substring with the result 
        if (strstr(s, oldW) == s) { 
            strcpy(&result[i], newW); 
            i += newWlen; 
            s += oldWlen; 
        
        else
            result[i++] = *s++; 
    
  
    result[i] = '\0'
    return result; 
  
// Driver Program 
int main() 
    char str[] = "xxforxx xx for xx"
    char c[] = "xx"
    char d[] = "Geeks"
  
    char* result = NULL; 
  
    // oldW string 
    printf("Old string: %s\n", str); 
  
    result = replaceWord(str, c, d); 
    printf("New String: %s\n", result); 
  
    free(result); 
    return 0; 

Output:

Old string: xxforxx xx for xx
New String: GeeksforGeeks Geeks for Geeks

Time Complexity: O(n)
Auxiliary Space: O(n)

Method 2: This method involves inplace update of string. It is more efficient as it uses only extra space for the new characters to be inserted. 

Implementation:

C++




#include <bits/stdc++.h> 
using namespace std; 
int main() 
    // code 
    int t; 
    cin >> t; 
    cin.ignore(); 
  
    while (t--) { 
        string s; 
        getline(cin, s); 
  
        string x, y; 
        getline(cin, x); 
        getline(cin, y); 
  
        reverse(s.begin(), s.end()); 
        reverse(x.begin(), x.end()); 
        reverse(y.begin(), y.end()); 
  
        int ls = s.length(), lx = x.length(), ly = y.length(); 
        int d = ly - lx; 
        int ct = 0; 
        int i = 0, j = 0; 
  
        while (i < ls) { 
            string temp = ""
            for (int k = 0; k < lx; k++) { 
                temp += s[i + k]; 
            
  
            if (temp == x) { 
                ct++; 
                i = i + lx; 
            
            else
                i = i + 1; 
            
        
  
        for (int i = 0; i < ct * d; i++) 
            s += ' '
  
        i = ls - 1; 
        j = ls + ct * d - 1; 
  
        while (i >= 0 && j >= 0) { 
            string temp = ""
            for (int k = 0; k < lx; k++) { 
                if (i < (lx - 1 - k)) 
                    break
  
                temp += s[i - (lx - 1 - k)]; 
            
  
            if (temp == x) { 
                int k = ly - 1; 
                while (k >= 0) 
                    s[j--] = y[k--]; 
  
                i = i - lx; 
            
            else
                s[j--] = s[i--]; 
            
        
        reverse(s.begin(), s.end()); 
        cout << s << endl; 
    
    return 0; 

Input:

1
xxforxx xx for xx
xx
geeks
Output:

geeksforgeeks geeks for geeks

Time Complexity: O(n)
Auxiliary Space: O(1)

 This article is contributed by Anuj Chauhan. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.


My Personal Notes arrow_drop_up
Related Articles

Start Your Coding Journey Now!