Program w języku C zastępujący słowo w tekście innym podanym słowem

Biorąc pod uwagę trzy ciągi „str”, „oldW” i „newW”. Zadanie polega na znalezieniu wszystkich wystąpień słowa „oldW” i zastąpieniu ich słowem „newW”. Przykłady:

Input : str[] = 'xxforxx xx for xx' oldW[] = 'xx' newW[] = 'geeks' Output : geeksforgeeks geeks for geeks 
Zalecane: Proszę o rozwiązanie PRAKTYKA najpierw, zanim przejdziesz do rozwiązania.

Pomysł polega na tym, aby przejść przez oryginalny ciąg i policzyć, ile razy w ciągu występuje stare słowo. Teraz utwórz nowy ciąg o wystarczającej wielkości, aby można było zastąpić nowe słowo. Teraz skopiuj oryginalny ciąg do nowego ciągu, zastępując słowo. 

Realizacja:

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: %s  n  '       str  );         result     =     replaceWord  (  str       c       d  );         printf  (  'New String: %s  n  '       result  );         free  (  result  );         return     0  ;      }      
Wyjście:
Old string: xxforxx xx for xx New String: GeeksforGeeks Geeks for Geeks 

Złożoność czasu : NA)
Przestrzeń pomocnicza: O(n)

Metoda 2: Ta metoda obejmuje aktualizację ciągu w miejscu. Jest bardziej wydajny, ponieważ wykorzystuje tylko dodatkową przestrzeń na wstawienie nowych znaków. 

Realizacja:

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  (  '  n  Modified string: %s'       str  );      return     0  ;   }   
Wejście:
1 xxforxx xx for xx xx geeks 
Wyjście:
geeksforgeeks geeks for geeks 

Złożoność czasowa: O(n)
Przestrzeń pomocnicza: O(1)

Utwórz quiz