새소식

언어/C++

c++ std::string의 원소 접근 방법 정리(front, back, at, operator)

  • -

c++ std::string의 원소 접근 방법에는 총 4가지가 있습니다.
operator[], at, front, back 이렇게 4가지 입니다
이 4가지 방법에 대해서 정리해보려 합니다!!
http://www.cplusplus.com/reference/string/string/ 을 바탕으로 정리하였습니다

1. operator[]

형태는 다음과 같이 생겼습니다

char& operator[] (size_t pos);
const char& operator[] (size_t pos) const;

이는 string의 pos위치의 문자에 대한 Reference를 반환합니다

예제 코드

뭔가 복잡한것처럼 쓰여있는 것 같지만 배열처럼 접근하면 됩니다

string str = "Test String";

for (int i = 0; i < str.size(); i++) {
    cout << str[i];    // cout << str.operator[](i);
}
cout << endl;
// 결과
//Test String

배열처럼 쓸 수 있고 operator를 이용해 사용할 수도 있습니다.

 

2. at

위와 똑같이 특정 위치의 문자를 얻어낼 수 있습니다.
형태는 다음과 같습니다

char& at (size_t pos);
const char& at (size_t pos) const;

위 operator[] 와 다른 점은 이 at 멤버 함수는 pos가 문자열 내 유효한 위치인지 판단하여
그렇지 않은 경우 out_of_range 에러를 발생 시킵니다.(operator[]의 경우는 프로그램 죽음)
즉 좀더 안전하게 짜기 위해서는 at을 사용하는게 좋아보입니다

예제 코드

기본 사용

string str = "Test String";

cout << str.at(0) << endl;

try-catch와 같이 사용
아래 처럼 사용하게 되면 에러가 발생해도 죽지 않고 잡아서 처리할 수 있습니다(at의 장점!!)

#include <exception>
#include <string>
#include <iostream>

using namespace std;

int main() {
    string str = "Test String";

    try {
        cout << str.at(15) << endl;
    }
    catch (exception err) {
        cout << err.what() << endl;
    }

    return 0;
}

 

3. front

이는 문자열의 첫 문자를 알아낼 수 있습니다
빈 문자열에서는 호출이 불가능 하며 c++11 이상 부터 지원합니다
begin()이랑 헷갈리지 않도록 주의해야 합니다(begin은 iterator 반환)

char& front();
const char& front() const;

예제 코드

string str = "Test String";

// 맨 앞의 문자 확인
cout << str.front() << endl;    // T

// 맨 앞의 문자 K로 변경
str.front() = 'K';
cout << str << endl;    //Kest String

char 포인터를 반환하므로 이를 이용해 맨 앞의 문자를 변경할 수도 있습니다

 

4. back

이는 문자열의 마지막 문자를 알아낼 수 있습니다
빈 문자열에서는 호출이 불가능 하며 c++11 이상 부터 지원

char& back();
const char& back() const;

예제 코드

string str = "Test String";

// 맨 뒷 문자 확인
cout << str.back() << endl;    // g

// 맨 뒤의 문자 K로 변경
str.back() = 'K';
cout << str << endl;    //Test StrinK

front와 같으 방식으로 작동하며 이도 포인터를 반환하므로
맨 뒤의 문자를 변경할 수도 있습니다

위 4가지를 알면 문자열을 구성하는 모든 문자에 접근할 수 있습니다

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.