HOWTO · C++

C++에서 문자열의 마지막 문자를 가져오는 방법

이 기사에서는 C++의 문자열에서 마지막 문자를 가져오는 방법에 대해 설명합니다.

이 페이지의 내용

"Spider Man"과 같은 문자열의 경우 text.back()은 그 마지막 문자를 직접 참조합니다. 검사되는 위치 접근을 원할 때는 at(text.size() - 1)도 사용할 수 있습니다. 이러한 방법 중 어느 것을 사용하기 전에 문자열에 문자가 포함되어 있어야 합니다.

std::string::at을 사용하여 C++의 문자열에서 마지막 문자 가져오기

std::string::at(index)는 0부터 시작하는 위치의 문자를 반환하고 해당 위치가 문자열 안에 있는지 검사합니다. 마지막 위치는 text.size() - 1입니다. 인덱스가 문자열 밖에 있으면 at()은 std::out_of_range를 던집니다. 인덱스 타입은 부호가 없으므로 음수 값은 유효한 음수 인덱스로 동작하는 대신 큰 부호 없는 값으로 변환됩니다.

이 예제를 실행하세요.

#include <iostream>
#include <string>

int main() {
    const std::string text = "Spider Man";
    std::cout << "Character at position 3: " << text.at(3) << '\n';
    std::cout << "Character at last position: "
              << text.at(text.size() - 1) << '\n';
}

첫 번째 접근은 인덱스 3을 사용하고, 두 번째는 문자열 길이에서 마지막 인덱스를 계산합니다. 그 마지막 위치를 계산하고 사용하기 전에 문자열이 비어 있지 않은지 확인하세요.

std::string::back()을 사용하여 C++의 문자열에서 마지막 문자 가져오기

std::string::back()은 마지막 문자에 접근하는 직접적인 방법입니다. 참조를 반환하므로 그 참조를 통해 문자를 읽거나 대체 값을 할당할 수 있습니다. 빈 문자열에 대해 back()을 호출하면 정의되지 않은 동작이 발생하므로 사용하기 전에 문자열을 확인하세요.

#include <iostream>
#include <string>

int main() {
    std::string text = "Spider Man";
    const char last = text.back();
    std::cout << "Character at the end: " << last << '\n';
    text.back() = '@';
    std::cout << "After replacement: " << text << '\n';
}

첫 번째 호출은 n을 읽고, 할당을 통해 문자열이 "Spider Ma@"로 바뀝니다.

std::string::rbegin()을 사용하여 C++의 문자열에서 마지막 문자 가져오기

std::string::rbegin()은 첫 번째 위치가 문자열의 마지막 문자에 해당하는 역방향 반복자를 반환합니다. 문자열이 비어 있지 않다면 이를 역참조하여 그 문자를 읽습니다.

#include <iostream>
#include <string>

int main() {
    const std::string text = "Spider Man";
    const auto last = *text.rbegin();
    std::cout << "The last character is: " << last << '\n';
}

역방향 반복으로 작업할 때는 rbegin()을 사용하세요. 단일 문자의 경우 back()이 더 직접적입니다.

문자열 반복자와 함께 std::reverse를 사용하여 C++에서 마지막 문자 가져오기

std::reverse는 <algorithm>에 선언된 알고리즘이며 std::string 멤버 함수가 아닙니다. 반복자 범위 내의 요소를 제자리에서 뒤집습니다. 비어 있지 않은 문자열을 뒤집은 후에는 text.front()가 원래 마지막이었던 문자를 참조합니다. 이로 인해 전체 문자열이 바뀌므로 마지막 문자만 읽으면 되는 경우에는 보통 불필요합니다.

#include <algorithm>
#include <iostream>
#include <string>

int main() {
    std::string text = "Spider Man";
    std::reverse(text.begin(), text.end());
    std::cout << "The former last character is: " << text.front() << '\n';
}

이 알고리즘은 begin()부터 end()까지의 반개 구간에 대해 동작합니다. 이후에 front()를 읽기 전에 문자열이 비어 있지 않은지 확인하세요.

std::string::substr()을 사용하여 C++의 문자열에서 마지막 문자 가져오기

std::string::substr(position, count)는 새 문자열을 반환합니다. 문자가 하나 이상 있는 문자열의 경우 text.substr(text.size() - 1, 1)은 그 마지막 문자를 한 문자로 된 문자열로 추출합니다. 시작 위치를 계산하기 전에 문자가 있는지 확인하세요.

#include <iostream>
#include <string>

int main() {
    const std::string text = "Spider Man";
    const std::string last = text.substr(text.size() - 1, 1);
    std::cout << "Last character extracted: " << last << '\n';
}

결과가 문자열이어야 할 때는 substr()을 선택하세요. char로 충분할 때는 문자 접근 연산을 사용하세요.

배열 인덱싱을 사용하여 C++에서 문자열의 문자에 액세스

std::string은 operator[]를 지원하므로 문자열이 비어 있지 않음을 확인한 후 마지막 문자를 text[text.size() - 1]로 읽을 수 있습니다. at()과 달리 operator[]는 범위를 벗어난 위치에 대해 동일한 검사 접근을 제공하지 않습니다.

#include <iostream>
#include <string>

int main() {
    const std::string text = "Spider Man";
    std::cout << "The last character is: "
              << text[text.size() - 1] << '\n';
}

인덱스는 0부터 시작합니다. 길이가 n인 문자열의 경우 마지막 문자는 인덱스 n - 1에 있습니다. 범위를 벗어난 인덱스를 예외로 보고하고자 한다면 at()을 선호하세요.

결론

비어 있지 않은 std::string의 마지막 문자에 직접 접근하려면 back()을 사용하세요. 검사되는 위치 접근이 유용할 때는 at(size() - 1)을 선택하세요. rbegin()도 역방향 반복을 통해 마지막 문자에 도달하고, substr()은 이를 문자열로 반환하며, 인덱싱은 at()의 경계 검사 없이 동일한 마지막 위치를 사용합니다. 끝에 접근하기 전에 문자열에 문자가 포함되어 있는지 확인하세요.