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

25 Jul, 2020
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.
// 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// stringchar* 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 Programint 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;}
Old string: xxforxx xx for xx
New String: GeeksforGeeks Geeks for Geeks

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.
#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;}
1
xxforxx xx for xx
xx
geeks

geeksforgeeks geeks for geeks

This article is contributed by Anuj Chauhan. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
Didi17
sarojrana
C Programs
Strings
Strings
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
C Program to read contents of Whole File
Header files in C/C++ and its uses
Program to print ASCII Value of a character
How to return multiple values from a function in C or C++?
How to Append a Character to a String in C
Write a program to reverse an array or string
Reverse a string in Java
Write a program to print all permutations of a given string
C++ Data Types
Longest Common Subsequence | DP-4