2021. 1. 31. 22:27ㆍSTL, 라이브러리
1. 개요
C++에서는 C style의 문자열 처리 방식 char*와 char[]를 사용할 수 있습니다..
char*는 포인터를 선언하는 것으로 사용하기 위해서는 동적 할당이 필요하고,
char[]는 스택에 배열을 넣는 것입니다.
그러나, 이는 모두 c++에서 권고되는 방식이 아닙니다. string 클래스는 추상화와 캡슐화를 모두 제공하기 때문에, 왠만하면 string 클래스를 사용합시다.
string.c_str()과
string 초기화 시 또는 assign 함수로 상호간의 변환이 가능합니다.
/* 타입 간 변환 */
const char* s = "Hello";
std::string str(s);
const char* s2 = str.c_str();
str.assgin(s2, strlen(s2));
2. 사용법
(1) iterators
begin()
시작지점의 iterator를 반환한다.
end()
끝 지점의 iterator를 반환한다.
rbegin()
거꾸로 시작하는 지점의 iterator를 반환한다.
rend()
거꾸로 끝나는 지점의 iterator를 반환한다.
#include <iostream>
using namespace std;
int main(){
string s = "Hello";
// 순방향 반복
for(string::iterator it = s.begin(); it != s.end(); ++it){
cout << *it;
}
cout << endl;
// 역방향 반복
for(string::reverse_iterator it = s.rbegin(); it != s.rend(); ++it){
cout << *it;
}
cout << endl;
}
(2) size 함수
size(), length()
string::size and string::length are synonyms and return the same value.
string 문자열의 사이즈를 출력한다.
(3) operator[]와 at(size_t pos)
[]와 at은 특정 인덱스의 char를 가져다 주는 함수이다.
두 가지 함수는 동일한 것 같으나 중요한 부분에서 다르기 때문에 at을 사용할 것을 추천한다.
다른 점은, []는 index를 벗어난 참조에서 에러를 출력하지 않는다는 점이다.
(4) back(), front() (c++11에서 추가)
string의 맨 앞 글자와 뒷 글자를 반환한다. 이 때 반환하는 것은 단순히 글자가 아닌 reference를 반환한다.
(5) Modifiers
+
두 String을 concatnation한다.
append(const string& str)
string을 뒤에 추가한다.
push_back(char c)
character c를 string에 추가한다.
assign(const string& str)
str과 동일한 새로운 값을 할당한다. shallow copy가 아닌 deep copy한다.
insert(size_t pos, const string& str)
insert(size_t pos, size_t n, char c)
pos의 위치에 c나 str 을 넣는 함수이다.
erase(size_t pos, size_t len)
pos에서부터 npos개를 삭제한다. len의 기본값은 npos(문자열 끝)까지이다.
erase(iter, iter)의 꼴로 iterator의 형태로 수행할 수 있다.
replace(size_t pos, size_t len, const string& str)
string의 pos의 위치에 len만큼을 str로 대체한다.
string s = "Wang"
string s1 = "Mijung is not here!"
s1.replace(0, 6, s);
// "Mijung is not here!" 에서 0번째 칸 M부터 6개의 글자 "Mijung"을 s로 대체
pop_back()
string의 맨 끝 글자를 제거한다.
리턴은 되지 않기 때문에, back()을 사용해서 끝 글자를 받고, pop_back()하는 구조의 코드를 구현하면 된다.
(6) String operation
copy(char* s, size_t len, size_t pos)
pos의 위치에서 부터 len 길이를 char* s에 복사한다.
find(const string& str, size_t pos = 0)
str을 pos위치에서부터 찾아 가장 처음 나오는 인덱스를 리턴한다.
rfind(const string& str, size_t pos = npos)
pos의 위치까지 str을 찾는다. str이 나타나는 가장 뒤의 원소를 찾는다.
cplusplus에서 api문서를 읽었을 때 pos parameter 설명은 좀 헷갈리게 묘사되지만, pos위치까지 중 가장 마지막인 것을 찾는다고 생각하면 된다.
substr(size_t pos = 0, size_t len = npos)
pos의 위치에서 len만큼의 string을 반환한다.
compare(const string& str)
str과 비교하여 같으면 0을 리턴한다.
(7) string::npos
string의 끝을 나타내는 상수이다.