logo

텍스트의 단어를 다른 주어진 단어로 바꾸는 C 프로그램

세 개의 문자열 '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)

방법 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)

퀴즈 만들기