코드 이해를 위해 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가지를 알면 문자열을 구성하는 모든 문자에 접근할 수 있다
'Language & Framework & GIT > C++' 카테고리의 다른 글
[C++] 스마트 포인터(SMART POINTER) (89) | 2023.10.27 |
---|---|
[C++]What is _MSC_VER? (102) | 2023.10.17 |
[C++] fopen() 함수란? (105) | 2023.08.04 |
[C++] WORD, DWORD, QWORD ? (49) | 2023.08.03 |
[C++] 문자열 숫자로 변환 관련 함수 - strtol, strtoul, strtod (16) | 2023.08.03 |
댓글