Dadas tres strings ‘str’, ‘oldW’ y ‘newW’. La tarea es encontrar todas las apariciones de la palabra ‘oldW’ y reemplazarlas con la palabra ‘newW’. Ejemplos:
Input : str[] = "xxforxx xx for xx", oldW[] = "xx", newW[] = "geeks" Output : geeksforgeeks geeks for geeks
La idea es recorrer la string original y contar el número de veces que aparece una palabra antigua en la string. Ahora haga una nueva string de tamaño suficiente para que la nueva palabra pueda ser reemplazada. Ahora copie la string original a la nueva string con el reemplazo de la palabra.
Implementación:
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: GeeksforGeeks Geeks for Geeks
Complejidad temporal : O(n)
Espacio auxiliar: O(n)
Método 2: este método implica la actualización in situ de la string. Es más eficiente ya que utiliza solo espacio adicional para que se inserten los nuevos caracteres.
Implementación:
CPP
#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
Complejidad temporal: O(n)
Espacio auxiliar: O(1)
Este artículo es una contribución de Anuj Chauhan . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA