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

i번째 글자가 C++에서 주어진 단어의 (i-1)번째, i번째 또는 (i+1)번째 글자인 단어 수

<시간/>

문자열 str[]이 입력으로 주어집니다. 목표는 str[]과 길이가 같고 문자 위치가 i번째 문자가 (i1) 또는 (i) 또는 (i+1) 위치의 문자로 대체되는 str[]의 단어를 계산하는 것입니다.

첫 번째 문자 교체는 i 또는 i+1 위치에서 시작됩니다.

마지막 문자 교체는 위치 i-1 또는 i에서 시작됩니다.

예를 들어 이해합시다.

입력 - str[] ="TPP"

출력 − i번째 글자가 주어진 단어의 (i-1)번째, i번째 또는 (i+1)번째 글자인 단어의 개수는 - 4

설명

Replacing T by T (i)th or 1st P (i+1)th = TPP, PPP
Replacing 1st P by T (i-1)th, P (i)th, or P(i+1)th = TTP, TPP, TPP
Replacing 2nd P by P(i-1)th or P(i)th = TPP, TPP
Unique combination of replacements: TPP, PPP, TTP, PTP

입력 - str ="아아아"

출력 - i번째 글자가 주어진 단어의 (i-1)번째, i번째 또는 (i+1)번째 글자인 단어의 개수:1

설명

Replacing a by a (i)th or 2nd a (i+1)th = aaa, aaa
Replacing 2nd a by a (i-1)th, a (i)th, or a(i+1)th = aaa, aaa, aaa
Replacing 3rd a by a(i-1)th or a(i)th = aaa, aaa
Unique combination of replacements: aaa

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

우리는 모든 편지에 세 가지 가능성이 있다는 것을 알고 있습니다. 현재 문자 i의 경우 모든 (i-1)번째, i번째, (i+1)번째가 다르면 3가지 옵션이 있습니다. 2개가 같으면 2개의 옵션이 있고 모두 같으면 1개의 옵션만 있습니다.

따라서 문자열을 탐색하고 고유성을 확인하고 문자에 따라 3, 2 또는 1을 곱합니다. 첫 번째와 마지막 문자에 대해 고유성을 확인하고 유사한 방식으로 2 또는 1을 곱합니다.

  • 문자열 str[]을 문자 배열로 사용합니다.

  • 함수 total(char str[], int length)는 문자열을 받아 i번째 문자가 주어진 단어의 (i-1)번째, i번째 또는 (i+1)번째 문자인 단어의 개수를 반환합니다. str[]의 단어.

  • 초기 개수를 1로 간주합니다. str[] 자체의 단어입니다.

  • 단일 문자가 있는 경우 길이는 1이 되고 1을 반환합니다.

  • 인덱스 0에서 첫 번째 문자를 확인합니다. 두 번째 문자와 같으면 str[0]==str[1] thenmultiply count by 1

  • 서로 다른 경우 count에 2를 곱합니다.

  • 이제 인덱스 i=1에서 i까지 for 루프를 사용하여 두 번째 문자에서 두 번째 마지막 문자까지 순회합니다.

  • 인덱스 i의 각 문자에 대해. str[i]가 str[i-1] 또는 str[i+1]과 같은지 확인합니다. 그렇다면 count에 1을 곱하십시오.

  • 둘 중 하나라도 같으면 count에 2를 곱합니다.

  • 그렇지 않으면 3을 곱합니다.

  • 마지막 문자의 경우 str[i-1]==str[i]인지 확인합니다. true이면 count에 1을 곱하고 그렇지 않으면 2를 곱합니다.

  • 마지막에 우리는 그러한 별개의 단어를 세게 될 것입니다.

  • 결과로 카운트를 반환합니다.

예시

#include<bits/stdc++.h>
using namespace std;
int total(char str[], int length){
   int count = 1;
   if (length == 1){
      return count;
   }
   if (str[0] == str[1]){
      count = count * 1;
   }
   else{
      count = count * 2;
   }
   for (int j=1; j<length-1; j++){
      if (str[j] == str[j-1] && str[j] == str[j+1]){
         count = count * 1;
      }
      else if (str[j] == str[j-1]){
         count = count * 2;
      }
      else if(str[j] == str[j+1]){
         count = count * 2;
      }
      else if(str[j-1] == str[j+1]){
         count = count * 2;
      }
      else{
         count = count * 3;
      }
   }
   if (str[length - 1] == str[length - 2]){
      count = count * 1;
   }
   else{
      count = count * 2;
   }
   return count;
}
int main(){
   char str[] = "TPP";
   int length = strlen(str);
   cout<<"Count of words whose i-th letter is either (i-1)-th, i-th, or (i+1)-th letter of given word
are: "<<total(str, length) << endl;
   return 0;
}

출력

위의 코드를 실행하면 다음 출력이 생성됩니다 -

Count of words whose i-th letter is either (i-1)-th, i-th, or (i+1)-th letter of given word are: 4