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

C++에서 문자열이 회문인지 확인하는 재귀 함수

<시간/>

입력으로 문자열 Str이 제공됩니다. 목표는 입력 문자열이 회문 단어인지 재귀 함수를 사용하지 않는지 찾는 것입니다. 회문 문자열은 앞이나 끝에서 읽을 때 같은 단어를 형성하는 문자열입니다. 길이가 0인 문자열은 회문으로 간주됩니다. 회문 문자 현명한 형식을 반전, 원본과 동일한 문자열.

회문의 예는 다음과 같습니다.- madam, abcba, malayalam 등

예시

입력 − Str ="말라얄람어"

출력 − 입력 문자열은 회문입니다.

설명 -

Str[ 0 ~ 8 ] =말라얄람어

역방향 Str [ 8 to 0 ] =말라얄람어

두 문자열이 동일합니다.

입력 − Str ="자습서"

출력 − 입력 문자열은 회문이 아닙니다.

설명 -

Str[ 0 ~ 7 ] ​​=튜토리얼

역방향 Str [ 7 to 0 ] =lairotut

두 문자열이 다릅니다.

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

이 접근 방식에서는 문자열에 단일 문자가 포함되어 있는지 확인하고, true이면 회문입니다. 그렇지 않은 경우 나머지 문자에 대해 전체 문자열을 재귀적으로 순회하고 해당 문자가 다른 경우 재귀를 중단합니다.

  • 입력 문자열 Str[]을 가져와 길이를 계산합니다.

  • 길이가 0이면 결과=1로 설정합니다.

  • Else set result=checkPalindrome(Str, 0, length - 1) 여기서 0은 첫 번째 인덱스이고 길이 - 1은 마지막 인덱스입니다.

  • 함수 checkPalindrome(char str[], int first, int last)는 문자열의 해당 문자와 ​​일치하지 않는 문자가 있으면 0을 반환합니다.

  • 첫 번째와 마지막 인덱스가 같으면 문자열에 한 문자가 있으면 1을 반환합니다.

  • 그렇지 않은 경우 first++, last- 및 재귀 호출 checkPalindrome(str, first, last)로 끝 문자를 제외한 나머지 문자를 확인합니다.

  • 모든 재귀가 끝나면 결과를 얻을 수 있습니다.

  • 1이면 입력 문자열이 회문입니다.

  • 그렇지 않으면 입력 문자열이 회문이 아닙니다.

  • 메인에서 결과를 출력하세요.

예시

#include <bits/stdc++.h>
using namespace std;
int checkPalindrome(char str[], int first, int last){
   if (first < last + 1){
      first++;
      last--;
      return checkPalindrome(str, first, last);
   }

   if (first == last){
      return 1;
   }
   if (str[first] != str[last]){
      return 0;
   }
   return 1;
}
// Driver Code
int main(){
   char Str[] = "madam";
   int result;
   int length = strlen(Str);
   if (length == 0){
      result=1;
   }

   else{
      result=checkPalindrome(Str, 0, length - 1);
   }
   if (result==1){
      cout << "Input string is palindrome.";
   }
   else{
      cout << "Input string is not a palindrome.";
   }
   return 0;
}

출력

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

Input string is palindrome.