logo

C Ohjelma korvaamaan sanan tekstissä toisella annetulla sanalla

Annettu kolme merkkijonoa 'str' 'oldW' ja 'newW'. Tehtävänä on löytää kaikki sanan 'oldW' esiintymät ja korvata se sanalla 'newW'. Esimerkkejä:

Input : str[] = 'xxforxx xx for xx' oldW[] = 'xx' newW[] = 'geeks' Output : geeksforgeeks geeks for geeks
Suositus: Ratkaise se HARJOITELLA ensin ennen kuin siirryt ratkaisuun.

Ajatuksena on kulkea alkuperäinen merkkijono ja laskea kuinka monta kertaa vanha sana esiintyy merkkijonossa. Tee nyt uusi riittävän kokoinen merkkijono, jotta uusi sana voidaan korvata. Kopioi nyt alkuperäinen merkkijono uuteen merkkijonoon korvaamalla sana. 

Toteutus:



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;  }  
Lähtö:
Old string: xxforxx xx for xx New String: GeeksforGeeks Geeks for Geeks

Aika monimutkaisuus : O(n)
Aputila: O(n)

Tapa 2: Tämä menetelmä sisältää merkkijonon päivityksen paikan päällä. Se on tehokkaampi, koska se käyttää vain ylimääräistä tilaa uusien merkkien lisäämiseen. 

Toteutus:

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; } 
Syöte:
1 xxforxx xx for xx xx geeks
Lähtö:
geeksforgeeks geeks for geeks

Aika monimutkaisuus: O(n)
Aputila: O(1)

Luo tietokilpailu