반응형
안녕하세요.
오늘은 C++ 라이브러리 함수를 이용해 간단하게 단어의 회문 여부를 판별하는 함수를 작성해보겠습니다.
회문(Palindrome)이란?
'civic', 'eye', 'level', 'madam', 'rotor' 와 같이 거꾸로 읽어도 철자가 같은 단어를 말합니다.
<algorithm> 헤더의 std::equal 함수와 멤버 함수인 std::string::rbegin 함수를 사용합니다.
bool is_palindrome(const std::string& s)
{
return std::equal(s.begin(), s.end(), s.rbegin());
}
equal 함수는 2개의 대상을 비교하여 참 또는 거짓을 반환합니다. 비교 대상은 [ s.begin(), s.end() ) 범위의 대상1과 s.rbegin()으로 시작하는 대상2를 비교합니다. equal 함수는 대상2의 크기는 대상1과 똑같다고 가정합니다. 따라서 대상 2는 시작 반복자만을 필요로 합니다.
위 함수는 s.begin()이 가리키는 요소와 s.rbegin()이 가리키는 요소를 차례로 비교합니다. s.rbegin()은 s.end()가 가리키는 요소와 동일하지만 순서는 역으로 이동합니다.
따라서 인수로 문자열 "level"을 전달하게 되면 equal 함수는 첫 번째 문자인 'l'과 마지막 문자인 'l'을 비교하고, 두 번째 문자인 'e'와 마지막에서 두 번째 문자인 'e'를 비교하는 순서로 동작합니다. 위 함수에 "madam"을 인수로 전달하면 회문에 해당하기 때문에 참을 반환합니다.
참고)
Accelerated C++
'C,C++ > C++' 카테고리의 다른 글
[C++ STL] 특정 값 제외 컨테이너 복사 std::remove_copy() 함수 (0) | 2019.11.06 |
---|---|
[C++] std::transform() 함수 및 back_inserter 함수에 대해 알아보자 (0) | 2019.11.04 |
[C++] 공백 단위로 문자열 자르는 split 함수 구현 ( find_if() 사용 ) (0) | 2019.11.01 |
[C++] 컨테이너 복사 std::copy 함수, 반복자 어댑터 std::back_inserter (1) | 2019.10.26 |
[C++] 수행 시간 측정 clock 함수 | ctime, clock_t, measure time (0) | 2019.10.13 |
댓글