본문 바로가기

카테고리 없음

[C++] 회문(palindrome) 판별하기

void main()
{
	char str[10], i;

	while(1)
	{
		cout << "단어를 입력해 주세요 : ";
		cin >> str;
		if(strcmp(str, "exit") == 0)break;

		for(i = 0; i < strlen(str); i++)
		{
			if(!(((str[i] >= 'a') && (str[i] <= 'z')) 
				|| ((str[i] >= 'A') && (str[i] <= 'Z')))) break;
		}
		if(i != strlen(str))
		{
			cout << "잘못된 값을 입력하셨습니다." << endl;
			for(i = 0; i < 10; i++)str[i] = NULL;
			continue;
		}

		for(i = 0; i < (strlen(str) / 2); i++)
		{
			if(str[i] != str[strlen(str) - i - 1])break;
		}
		if(i == (strlen(str) / 2))cout << "회문입니다." << endl;
		else cout << "회문이 아닙니다." << endl;
		for(i = 0; i < 10; i++)str[i] = NULL;
	}
}

프로그램 실행화면


회문을 판별해주는 프로그램이다. 회문이라함은 앞으로 읽으나 뒤로 읽으나 같은 말이 되는 단어이다. 단어의 글수가 짝수이든 홀수이든 상관없이 작동된다.


말로 설명하자만 teet를 판별한다고 했을 때 제일 첫 글자와 마지막 글자를 비교한다. 같다면 두번 째와 끝에서 두번째를 비교한다.


이렇게 계속 검사하되 단어의 글자수 / 2만큼 반복을 한다. 다른 글자가 없었다면 회문이고 다른 글자가 있었다면 회문이 아닌 것이다.