[C언어 소스] 앞 뒤가 똑같은 문, 회문(Palindrome) 구하기

안녕하세요. 언제나 휴일입니다.

앞 뒤가 똑같은 문을 회문(Palindrome)이라고 말합니다. “HannaH”처럼 앞으로 읽거나 뒤로 읽거나 같은 문을 말하는 것이죠.

이번에는 회문인지 판별하는 소스 코드입니다.

알고리즘

회문인지 판별(str)

    len = 문자열 길이

    반복(i:0->len/2)

        조건(str[i] != str[len-i-1])

            거짓 반환

    참 반환

회문 실행 결과
회문

소스 코드

//회문(Palindrome)
//앞 뒤가 똑같은 문을 회문(Palindrome) 이라고 합니다.

#include <string.h>
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
int Palindrome(char str[]);
int main()
{
    char test_str[5][100] =
    {
        "HannaH",//회문인 예
        "ReliefpfeileR",//회문인 예
        "Root",//회문이 아닌 예
        "RotoR",//회문인 예
        "RentneR"//회문인 예
    };
    int i = 0;
    for (i = 0; i<5; i++)//5번 테스트
    {
        if (Palindrome(test_str[i]))//회문이 맞으면
        {
            printf("%s 는 회문임\n", test_str[i]);
        }
        else//회문이 아니면
        {
            printf("%s 는 회문이 아님\n", test_str[i]);
        }

    }
    return 0;
}
int Palindrome(char str[])
{
    int len = 0;
    int i = 0;
    //거짓인 문자(널문자)가 나올때까지 이동
    for (len = 0; str[len]; len++); //len = strlen(str); 과 같은 코드입니다.
    for (i = 0; i<(len / 2); i++)//i를 0~len/2까지 이동하면서 반복
    {
        if (str[i] != str[len - i - 1])//str[i]와 str[len-i-1]이 서로 다르면
        {
            return 0;//회문이 아니므로 0 반환
        }
    }
    return 1;//회문이므로 1 반환

}