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[] = "neveropen" Output : neveropen neveropen for neveropen
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; } |
Old string: xxforxx xx for xx New String: neveropen Geeks for Geeks
Time Complexity: O(n)
Auxiliary Space: O(n)
Method 2: This method involves the in-place update of the string. It is more efficient as it uses only extra space for the new characters to be inserted.
Implementation:
C
// C Program to replace a word in a text by another given // word by inplace updation #include <stdio.h> #include <stdlib.h> #include <string.h> void replaceWord( char * str, char * oldWord, char * newWord) { char *pos, temp[1000]; int index = 0; int owlen; owlen = strlen (oldWord); // Repeat This loop until all occurrences are replaced. while ((pos = strstr (str, oldWord)) != NULL) { // Bakup current line strcpy (temp, str); // Index of current found word index = pos - str; // Terminate str after word found index str[index] = '\0' ; // Concatenate str with new word strcat (str, newWord); // Concatenate str with remaining words after // oldword found index. strcat (str, temp + index + owlen); } } int main() { char str[1000], oldWord[100], newWord[100]; printf ( "Enter the string: " ); gets (str); printf ( "Enter the word to be replaced: " ); gets (oldWord); printf ( "Replace with: " ); gets (newWord); replaceWord(str, oldWord, newWord); printf ( "\nModified string: %s" , str); return 0; } |
1 xxforxx xx for xx xx neveropen
neveropen neveropen for neveropen
Time Complexity: O(n)
Auxiliary Space: O(1)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!