Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 주어진 두 문자열의 모든 인터리빙을 인쇄합니다.


이 문제에서 두 개의 문자열 str1과 str2가 주어지고 두 문자열에서 모든 인터리빙 문자열을 인쇄해야 합니다.

인터리빙 문자열 각 문자열의 문자 순서가 되도록 두 개의 주어진 문자열을 사용하여 생성되었습니다.

문제를 이해하기 위해 예를 들어 보겠습니다 -

Input: str1 = “XY” str2= “NS”
Output: XYNS, XNYS, XNSY, NXYS, NXSY, NSXY

이 문제를 해결하기 위해 문자열의 모든 문자를 사용합니다. str1의 길이는 m이고 str2의 길이는 n이므로 이 문자열에서 모든 인터리브된 문자열을 생성합니다.

모든 인터리빙 문자열을 인쇄하기 위해 문자열의 문자를 수정하고 문자열의 모든 조합을 재귀적으로 호출합니다.

예시

우리의 논리 구현 -

#include <iostream>
#include <string.h>
using namespace std;
void printStrings (char *str1, char *str2, char *iStr, int m, int n, int i) {
   if (m == 0 && n == 0)
      cout<<iStr<<endl ;
   if (m != 0) {
      iStr[i] = str1[0];
      printStrings(str1 + 1, str2, iStr, m - 1, n, i + 1);
   }
   if (n != 0) {
      iStr[i] = str2[0];
      printStrings(str1, str2 + 1, iStr, m, n - 1, i + 1);
   }
}
void generateInterleavingString(char *str1, char *str2, int m, int n) {
   char *iStr= new char[((m + n + 1)*sizeof(char))];
   iStr[m + n] ='\0';
   printStrings(str1, str2, iStr, m, n, 0);
}
int main() {
   char str1[] = "XY";
   char str2[] = "NS";
   cout<<"All interleaving string are :\n";
   generateInterleavingString(str1, str2, strlen(str1), strlen(str2));
   return 0;
}

출력

All interleaving string is −
XYNS
XNYS
XNSY
NXYS
NXSY
NSXY