Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 프로그램으로 주어진 문자열이 회문(Palindrome)인지 확인하는 방법

회문(Palindrome)은 앞에서부터 읽으나 뒤에서부터 읽으나 동일한 단어, 숫자, 문구 또는 문자열을 의미합니다. 예를 들어 'madam', 'racecar' 같은 단어나 숫자 '10801'은 모두 회문입니다.

주어진 문자열을 뒤집었을 때 원래 문자열과 같다면 그 문자열은 회문이라고 할 수 있습니다. 즉, 회문 여부를 확인하려면 첫 번째 문자와 마지막 문자, 두 번째 문자와 뒤에서 두 번째 문자가 서로 같은지 순서대로 비교하면 됩니다.

입력 − naman

출력 − string is a palindrome

입력 − tutorials point

출력 − string is not a palindrome

회문 판별 알고리즘

문자열이 회문인지 확인하는 프로그램의 기본 원리는 다음과 같습니다. 입력받은 문자열을 새로운 문자열에 복사한 후, 첫 번째 문자와 마지막 문자를 비교하고, 두 번째 문자와 뒤에서 두 번째 문자를 비교하는 방식으로 문자열 끝까지 진행합니다. 모든 위치에서 문자들이 동일하다면 해당 문자열은 회문이며, 하나라도 다르면 회문이 아닙니다.

예제 코드

#include <iostream>
#include<string.h>
using namespace std; {
    int main(){
        char string1[]={"naman"};
        int i, length;
        int flag = 0;
        length = strlen(string1);
        for(i=0;i < length ;i++){
            if(string1[i] != string1[length-i-1]) {
                flag = 1;
                break;
            }
        }
        if (flag==1){
            printf(" string is not a palindrome");
        } else {
            printf(" string is a palindrome");
        }
        return 0;
    }
}

실행 결과

string is a palindrome

코드 설명

위 코드는 strlen() 함수로 문자열의 길이를 구한 뒤, for 반복문을 사용해 앞쪽 문자(string1[i])와 뒤쪽 문자(string1[length-i-1])를 비교합니다. 일치하지 않는 문자가 발견되면 flag 변수를 1로 설정하고 break 문으로 반복문을 즉시 종료하여 불필요한 연산을 줄입니다. 최종적으로 flag 값에 따라 해당 문자열이 회문인지 아닌지를 출력합니다.

참고 − 이 프로그램은 대소문자를 구분합니다(case sensitive). 따라서 'Madam'처럼 대문자가 포함된 문자열은 첫 글자와 마지막 글자가 다른 것으로 간주되어 회문으로 판별되지 않습니다. 대소문자를 무시하고 검사하려면 비교 전에 tolower() 또는 toupper() 함수로 모든 문자를 통일해야 합니다.