1. 생성
헤더 파일 : <string>
① string str("abcd"); // 바로 생성
② string str1; // 선언 후 값 주기
str1 = "abcd";
③ string str2(str1);
* 문자열 끝에 null이 들어가지 않는다.
2. 인자 접근
① str.at(index);
해당 위치(index)에 해당하는 문자를 반환한다. index가 범위를 벗어나면 예외 리턴.
함수 예시 : str.at(0); // "Hello" -> 'H'를 리턴
② str.operator[index]
일반 배열처럼 대괄호를 이용해서 인자에 접근 가능하다.
해당 위치(index)에 해당하는 문자를 반환한다.
*at과 다른 점 : index(인덱스) 범위를 검사하지 않기 때문에 at 함수보다는 빠르다.
하지만 예외를 리턴하지 않는다.
함수 예시: str[0]; // "Hello" -> 'H'를 리턴
③ str.front();
맨 앞 인자를 반환한다.
함수 예시: str.front(); // "Hello" -> 'H'를 리턴
④ str.back();
맨 뒤 인자를 반환한다.
함수 예시: str.back(); // "Hello" -> 'o'를 리턴
3. size 관련 함수
① str.size();
사이즈를 반환한다.
함수 예시: str.size(); // "Hello" -> 5를 리턴
② str.length();
길이를 반환한다. (size()와 같다고 생각하면 된다.)
함수 예시: str.length(); // "Hello" -> 5를 리턴
③ str.capacity();
할당된 메모리 크기(bytes)를 반환한다.
메모리 할당을 size(길이)에 대비해서 여유롭게 한다.
size(길이)가 capacity(메모리)를 넘게 될 때 새롭게 더 큰 capacity(메모리)를 할당한다.
함수 예시 : str1.capacity(); // "HelloHello" size(길이)는 10, capacity(메모리)는 15
함수 예시 : str2.capacity(); // "HelloHelloHelloH" size(길이)는 16, capacity(메모리)는 31
④ str.resize(n); , str.resize(n,c);
string을 n만큼의 크기로 만든다.
만약 그 크기가 원래 사이즈보다 작다면, 남은 스트링을 버린다.
만약 그 크기가 원래 사이즈 보다 크다면, 빈 공간으로 남은 공간을 채운다.
만약 c를 사용한다면 남은 공간을 c로 채울 수 있다.
함수 예시 : str.resize(5) // "HelloHello" -> "Hello" size는 5
함수 예시 : str.resize(6) // "Hello" -> "Hello " size는 6, 제일 뒤에 빈칸
함수 예시 : str.resize(10, 'v') // "Hello" -> "Hello vvvv"
⑤ str.shrink_to_fit();
string 길이에 비해 낭비되고 있는 capacity(메모리)를 줄이는 함수이다.
함수 예시 : str.resize(5); // "HelloHelloHelloH"
> "Hello" size(길이)는 5지만 capacity(메모리)는 여전히 31
함수 예시 : str.shrink_to_fit(); // "Hello"처럼 size(길이) 5가 된 string의 capacity(메모리)에
알맞게 str의 capacity(메모리)가 31->15으로 줄어든다.
⑥ str.reserve(n);
string을 넣기 전, 미리 n만큼의 size(길이)에 맞는 capacity(메모리)를 할당하는 함수이다.
⑦ str.clear();
스트링에 들어있는 문자열을 지우는 함수이다.
이때, size와 length는 0이 되고, capacity는 그대로 남게 됩니다.
함수 예시 : str.clear(); // "Hello" -> ""
size와 lenth는 0이 되고, capacity(메모리)는 15 그대로 이다.
(메모리 해제X)
⑧ str.empty();
스트링이 비었는지 확인하는 함수이다. 비었으면 true를 반환한다.
비었음의 기준은 size, length가 0인 것 이다. capacity(메모리)와는 관계가 없다.
함수 예시 : if(str.empty()) { return true; }
4.
① str.c_str();
C++의 string 문자열을 C의 문자열로 변경해주는 함수이다.
함수 예시 : const char* arr = str.c_str(); // "HelloHello" -> "HelloHello\0"로 반환.
② str.substr(); , str.substr(index); , str.substr(index, len);
string을 잘라서 반환하는 함수이다.
함수 예시 : str.substr(); // "HelloHello" 그대로 반환.
함수 예시 : str.substr(6); // "ello"를 반환. index 5 번째 인자부터 끝까지의 string을 반환.
함수 예시 : str.substr(6, 1); // "e"를 반환. 5번째 인자부터, 1의 길이만큼 string을 반환.
③ str.replace(index, len, str2);
string의 index위치에서 len 길이까지의 범위를 매개변수로 들어온 str2 전체로 대체 하는 함수이다.
함수 예시 : str1.replace(5, 2, str2);
// "HelloHello"의 5번째 인자에서부터 2개를 str2("AAAA")로 대체한다.
-> "HelloAAAAllo" 로 변경
함수 예시 : str1.replace(str1.find("AAAA"), 2, "He");
// "HelloAAAAllo"에서 "AAAA"를 찾아 "He"로 대체한다.
-> "HelloHello" 로 변경
④ str.compare(str2);
매개변수로 들어온 str을 비교해서 같으면 0을 반환하고, 다르면 0이 아닌 값을 반환하는 함수이다.
매개변수로 들어온 스트링의 값보다 작을때(사전순 빠를때) 음수(0보다 작은값)를 반환하고 ,
매개변수로 들어온 스트링의 값보다 클때(사전순 느릴때) 양수(0보다 큰값)를 반환한다.
함수 예시 : str1.compare(str2);
// str1("Hello"), str2("HiHi")는 같지 않기 때문에 0이 아닌 값을 반환하고,
H까지는 둘이 똑같고, 그다음 str1의 "e"와, str2의 "i"를 비교한다.
이때, "e"가 "i"보다 사전상 더 앞선글자이기 때문에 str1이 더 작은 글자가 된다.
그렇기 때문에 음수(0보다 작은값)를 반환하게 된다.
함수 예시 : str1.compare("Hello");
// str1("Hello")와 "Hello"는 같기 때문에 0을 반환한다.
함수 예시 : str1.compare(0, 1, str2);
// str1("Hello")의 0번째 인덱스 부터 길이가 1인 문자열 "H"와
str2("HiHi) 를 비교한다. 두 문자열이 다르기 때문에 0이 아닌 수를 반환합니다.
함수 예시 : str1.compare(0, 1, str2, 0, 1);
// str1("Hello")의 0번째 인덱스 부터 길이 1인 문자열 "H"와
str2("HiHi")의 0번째 인덱스 부터 길이 1인 문자열 "H"를 비교한다.
비교할 문자열이 같기 때문에 0을 반환한다.
⑤ str1.copy(arr, len, index);
복사를 하는 함수이다.
함수 원형 : size_t copy(char* arr, size_t len, size_t index = 0) const;
첫번째 매개변수 : char* 인걸 보면, C언어의 문자열(배열타입)을 받습니다.
두번째 매개변수 : 복사할 문자열의 길이
세번째 매개변수 : 복사를 시작할 위치
return 값 : 실제로 복사된 길이, arr의 길이를 반환합니다.
함수 예시 : char arr[10]; // 문자열을 복사해서 넣을 빈 배열을 만듭니다.
int arrLen = str1.copy(arr, 3, 2); // index 2부터 3의 길이만큼 복사 -> "Hello"
실제로 복사된 길이 3 반환
arr[arrLen] = '\0'; // C의 문자열의 끝에는 '\0'
⑥ str.find(str2); , str.find(str2, index);
매개변수로 들어온 문자열과 일치하는 게 있는지 확인하는 함수이다.
만약에 일치하는게 있다면, 일치하는 부분의 첫번째 순서(index)를 반환한다.
두번째 매개변수로 들어온 index는 찾을 위치.
함수 예시 : str1.find("Hello"); // str1("HelloHello") 와 "Hello"를 비교
-> 일치하는 부분의 첫번째 순서(index)인 0을 반환
함수 예시 : str1.find("Hello", 5); // str1("HelloHello") 와 "Hello"를 5번째 인자부터 비교
-> 일치하는 부분의 첫번째 순서(index)인 5를 반환
⑦ str.push_back(c);
함수를 호출하는 스트링의 맨뒤에 문자 c를 더하는 함수 이다.
함수 예시 : str.push_back('a'); //"HelloHello" -> "HelloHelloa"
⑧ str.pop_back();
함수를 호출하는 스트링의 맨뒤에 있는 문자 하나를 없애는 함수 이다.
함수 예시 : str.pop_back(); //"HelloHelloa" -> "HelloHello"
5. iterator 종류
① str.begin();
문자열의 첫 번째 문자를 가리키는 반복자(iterator 포인터)를 반환
② str.end();
문자열의 마지막의 바로 다음을 가리키는 반복자(iterator 포인터)를 반환
5. 기타 등등
① swap(str1, str2)
str1과 str2를 바꾸는 함수. 서로 참조(reference)를 교환해서 스왑을 한다.
함수 예시 : swap(str1, str2); // str1("Hello") ,str2("HiHi") -> str1("HiHi"), str2("Hello")
② operator+
이어붙이기
함수 예시 : str1 += str2; // str1("HiHi") += str2("Hello") = str1("HiHiHello")
*[개발자 지망생]님 블로그를 보고 공부하며 제가 보기 편하게 정리 한 글 입니다.*
출처: https://blockdmask.tistory.com/338 [개발자 지망생]