본문 바로가기
Language & Framework & GIT/C++

C++ std::string 원소 접근 방법(front, back, at, operator)

by veganwithbacon 2023. 10. 16.
반응형

코드 이해를 위해 C++을 같이 보다보니, 책보다 구글센세가 알려주는게 더 많아서 정리.

 

구글이라서 최강인가, 최강이라서 구글인가(퇴근 직전에 갑자기 생각나서 넣음)

 

c++ std::string의 원소 접근 방법인 operator[], at, front, back 4가지에 대해 정리해보려 한다.
http://www.cplusplus.com/reference/string/string/ 을 바탕으로 정리했다.

 

사실 그냥 at 쓰임이 긴가민가해서 다 가져옴.

 

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와 같이 사용
아래 처럼 사용하게 되면 에러가 발생해도 죽지 않고 잡아서 처리할 수 있다

#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가지를 알면 문자열을 구성하는 모든 문자에 접근할 수 있다

 
반응형

댓글