C++ : String class 스트링 클래스!

2021. 1. 31. 22:27STL, 라이브러리

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.

출처 : www.cplusplus.com/reference/string/string/size/

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의 끝을 나타내는 상수이다.