Дано три рядки 'str' 'oldW' і 'newW'. Завдання полягає в тому, щоб знайти всі входження слова 'oldW' і замінити його словом 'newW'. приклади:
Input : str[] = 'xxforxx xx for xx' oldW[] = 'xx' newW[] = 'geeks' Output : geeksforgeeks geeks for geeksРекомендовано: розв’яжіть це на ПРАКТИКА перш ніж переходити до вирішення.
Ідея полягає в тому, щоб пройти вихідний рядок і підрахувати, скільки разів старе слово зустрічається в рядку. Тепер створіть новий рядок достатнього розміру, щоб можна було замінити нове слово. Тепер скопіюйте оригінальний рядок у новий рядок із заміною слова.
Реалізація:
C
// C program to search and replace // all occurrences of a word with // other word. #include #include #include // 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] != ' '; 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] = ' '; 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: %sn' str); result = replaceWord(str c d); printf('New String: %sn' result); free(result); return 0; }
Вихід: Old string: xxforxx xx for xx New String: GeeksforGeeks Geeks for Geeks
Часова складність : O(n)
Допоміжний простір: O(n)
Спосіб 2: Цей метод передбачає оновлення рядка на місці. Це ефективніше, оскільки використовує лише додатковий простір для вставлення нових символів.
Реалізація:
C// C Program to replace a word in a text by another given // word by inplace updation #include #include #include 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] = ' '; // 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 geeksВихід:
geeksforgeeks geeks for geeks
Часова складність: O(n)
Допоміжний простір: O(1)