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

C++의 일반화된 약어

<시간/>

단어가 있다고 가정합니다. 우리는 단어의 일반화된 약어를 ​​생성할 수 있는 함수를 정의해야 합니다.

따라서 입력이 "단어"와 같으면 출력은 ["단어", "1ord", "w1rd", "wo1d", "wor1", "2rd", "w2d", "wo2", " 1o1d", "1or1", "w1r1", "1o2", "2r1", "3d", "w3", "4"]

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • ret 배열 정의

  • solve() 함수를 정의하면 s, idx,

    가 필요합니다.
  • idx>=크기가 s이면 -

    • ret 끝에 s 삽입

    • 반환

  • y :=인덱스 0에서 idx까지의 s의 부분 문자열 - 1

  • i :=y의 크기

  • num :=빈 문자열

  • 동안 (i>=0 및 y[i] <='9'의 ASCII 및 y[i]>='0'의 ASCII), 수행 -

    • 숫자 :=y[i] + 숫자

    • (i를 1 감소)

  • i가 y의 크기와 같지 않으면 -

    • ret :=인덱스에서 s의 부분 문자열(0부터 idx까지 - (y의 크기 - 1 - i) - 1) 문자열로 연결(숫자 + 1) 인덱스(0부터 idx까지)에서 s의 부분 문자열 연결

    • s1 :=숫자 + 1을 문자열로

    • s2 :=숫자를 문자열로

    • s1의 크기가 s2의 크기와 같으면 -

    • 그렇지 않으면

      • 해결(ret, idx + 1)

  • 그렇지 않으면

    • 이전 :=s[idx]

    • s[idx] :='1'

    • 해결(들, idx + 1)

    • s[idx] :=이전

  • 해결(들, idx + 1)

  • 주요 방법에서 다음을 수행하십시오 -

  • 해결(단어, 0)

  • 리턴 렛

예시

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

#include 네임스페이스 std;void print_vector(vector ret; 무효 해결(문자열 s, int idx){ if (idx>=s.size()) { ret.push_back(s); 반품; } 문자열 y =s.substr(0, idx); 정수 i =y.size() - 1; 문자열 번호 =""; 동안 (i>=0 &&y[i] <='9' &&y[i]>='0') { 숫자 =y[i] + 숫자; 나--; } if (i !=y.size() - 1) { string ret =s.substr(0, idx - (y.size() - 1 - i)) + to_string(stoi(num) + 1) + s .substr(idx + 1); 문자열 s1 =to_string(stoi(숫자) + 1); 문자열 s2 =to_string(stoi(숫자)); if (s1.size() ==s2.size()) solve(ret, idx); 그렇지 않으면 해결(ret, idx + 1); } else { 문자 이전 =s[idx]; s[idx] ='1'; 풀다(들, idx + 1); s[idx] =이전; } 풀다(들, idx + 1); } vector 

입력

안녕하세요

출력

<프리>[5, 4o, 3l1, 3lo, 2l2, 2l1o, 2ll1, 2llo, 1e3, 1e2o, 1e1l1, 1e1lo, 1el2, 1el1o, 1ell1, 1ello, h4, h3o, h2l1, hl1, h1 h1llo, he3, he2o, he1l1, he1lo, hel2, hel1o, hell1, 안녕하세요, ]