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

C++에서 동일한 문자 쌍 사이에 별을 삽입하는 재귀 프로그램

<시간/>

문자열 str1이 입력으로 주어졌습니다. 목표는 입력 문자열에서 동일한 문자 쌍 사이에 '*'를 삽입하고 재귀 접근 방식을 사용하여 결과 문자열을 반환하는 것입니다.

입력 문자열이 str1="wellness"인 경우 그러면 출력은 "well*lnes*s"가 됩니다.

예시

입력 − str1="행복"

출력 − * 추가 ​​후 문자열 :hap*pines*s

설명 − pp와 ss 쌍 사이에 *를 추가하면 결과 문자열 hap*pines*s가 생성됩니다.

입력 − str1="수영장"

출력 − * 추가 ​​후 문자열 :swim*m*m*ming*g*g*g po*o*o*ol

설명 − mm, gg 및 oo 쌍 사이에 *를 추가하면 결과 문자열이 제공됩니다. swim*m*m*ming*g*g*g po*o*o*ol

아래 프로그램에서 사용된 접근 방식은 다음과 같습니다.

이 접근 방식에서는 문자열 str1을 사용합니다. 각 반복에서 str1을 현재 인덱스를 중간 지점으로 두 개로 나눕니다. 첫 번째 부분 문자열의 마지막 문자가 다음 부분 문자열의 첫 번째 문자와 같으면 원래 문자열을 부분 문자열 1로 설정하고 '*' 다음에 부분 문자열 2가 옵니다. substring2의 길이가 0인 경우 재귀를 종료합니다.

  • 입력 문자열을 str1로 가져오고 길이를 len으로 계산합니다.

  • 함수 addStar(string&s1, int i, int len1)는 s1, 길이 및 현재 인덱스를 입력으로 취하고 두 쌍의 문자가 같으면 *를 추가합니다.

  • 인덱스 0에서 i까지 s1의 부분 문자열로 tmp1을 가져옵니다.

  • tmp2를 인덱스 i에서 len1 + 1까지 s1의 부분 문자열로 가져옵니다.

  • tmp1의 마지막 문자와 tmp2의 첫 번째 문자가 같으면 s1=tmp1+'*'+tmp2로 설정합니다.

  • addStar(s1, i+1, len1)를 호출합니다. 다음 반복을 위해.

  • 마지막에 main 내부의 str1을 인쇄합니다.

예시

#include <iostream>
using namespace std;
void addStar(string& s1, int i, int len1){
   string tmp1=s1.substr(0,i);
   string tmp2=s1.substr(i,len1+1);
   if (tmp2.length() == 0){
      return;
   }
   if (tmp1[i-1] == tmp2[0]){
      s1 = tmp1 + '*' + tmp2;
   }
   addStar(s1, i+1, len1);
}
int main(){
   string str1 = "aabbcccdddd";
   int len=str1.length();
   addStar(str1, 0, len-1);
   cout << "String after adding * : "<<str1 << endl;
   return 0;
}

출력

위의 코드를 실행하면 다음과 같은 출력이 생성됩니다.

String after adding * : a*ab*bc*c*cd*d*d*d