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