본문 바로가기
Program Language/C, C++, MFC

[C++] string Class 에 대해서 사용법 및 기능 정리

by Sin_ 2021. 9. 14.
728x90

안녕하세요 뚜디 입니다:)

C++ string Class 에 대해 알아보도록 하겠습니다.


#include <string>


string 초기화
string str; string 변수 str 생성
string str("ddudi"); string 변수 str"ddudi"로 초기화
string str = "ddudi"; string 변수 str"ddudi"로 초기화

 

string 인자 접근 방법
str.at(숫자); string 변수의 "숫자"번째 참조
str[숫자]; string 변수의 "숫자"번째 참조
str.front(); string 변수의 첫번째 인자 반환
str.back(); string 변수의 마지막 인자 반환
str.c_str(); string 변수를 const char*로 접근 가능하도록 함(NULL 포함)
str.at(숫자)와 str[숫자]의 차이점은 범위 검사에 의한 예외처리 유/무입니다.
sta.at(숫자)는 범위 검사를 통해 범위 이외의 값이 들어오면 std::out_of_range를 반환
str[숫자]는 범위 검사를 하지 않으며, 디버깅됨

 

string Iterator
str.begin(); string 변수의 첫번째 주소 반환
str.end(); string 변수의 마지막+1 주소 반환
str.rbegin(); string 변수의 마지막 주소 반환
str.rend(); string 변수의 첫번째-1 주소 반환

 

string size관련
str.size(), str.length() string변수에 들어있는 인자에 대한 길이 반환
str.empty() string변수가 비어있으면 true, 아니면 false 반환
str.capacity() string변수에 활당된 실제 크기(byte) 반환
str.max_size() string변수에 활당될 수 있는 최대 메모리 크기 반환
str.reserve(숫자) string변수를 숫자만큼 capactity 길이를 설정
str.resize(숫자)
str.resize(size_t n, char c)
string변수를 숫자만큼의 크기로 만듭니다
str.shrink_to_fit() string변수에 잉여 capacity 공간을 조절해 준다
str.clear() string변수에 문자열을 지우는 함수
※ str.capacity()
"DDuDiDDuDi" 길이는 10인데 capacity는 15
capacity는 string길이가 증가할 수 있기 때문에, 메모리 할당을 size에 비해 여유롭게 합니다.

※ str.reserve(숫자)
str.resereve(100);
cout << str.capacity() << endl;
capacity의 크기를 100으로 설정을 하더라도 실제 메모리 할당은 111로 출력되는 것을 볼 수 있습니다.

※ str.resize(숫자) / str.resize(size_t n, char c)
string변수를 숫자만큼의 크기로 만들 때,
원래 사이즈보다 작다면, 남은 스트링을 버리고, 원래 사이즈보다 크다면, 빈 공간을 남은 공간을 채움
str = "DDuDi";
str.resize(1); = "D"
str.resize(7); = "DDuDi  "
str.resize(10, 'v'); = "DDuDivvvvv"

※ str.clear()
string변수에 문자열을 지우는 함수 이때, size와 length는 0이 되지만, capacity는 그대로 남게 됩니다.

 

string의 기능
str.push_back() string변수 맨 뒤 인자 추가 (문자열X, 문자O)
str.pop_back() string변수 맨 뒤 인자 삭제 (str.size() - 1)
str.insert() string변수 str에 원하는 위치에 문자 삽입
str.erase() string변수 str에 원하는 부분 삭제
str.append() 문자열 뒤에 문자열 추가
str.operator += 문자열 뒤에 문자열 추가
str.compare() 문자열 비교 함수
str.replace() 문자열 수정
str.substr() 문자열 중 원하는 부분을 반환
str.copy() 문자열 복사 (char [])
str.swap() str문자열과 다른 문자열 바꿈
str.find(문자or문자열) 찾은 index값을 정수 형태로 반환, 없으면 -1 반환
str.rfind(문자or문자열) find와 동일하지만 뒤에서부터 찾는다
※ str.insert()
string str = "ddudi";
str.insert(0, "ddudi"); = ddudiddudi
str.insert(str.begin() + str.finde_first_of('i')+1, 'v'); = ddudiv

※ str.erase()
str.erase(0, 3); = di
str.erase(find(str.begin(), str.end(), 'u'); = dddi (ddudi의 u만 지움)
str.erase(str.find('u')); = dd (ddudi의 u부터 모두 지움)

※ str.compare()
매개변수로 들어온 str을 비교해 같으면 0 반환, 다르면 -1or1반환
str.compare(str1)
str.compare(0, 2,str1)
 - str의 0번째 인덱스부터 길이가 2인 문자열과 str1을 비교
str.compare(0, 2, str1, 4, 2)
 - str의 0번째 인덱스부터 길이가 2인 문자열과 str1의 4번째 인덱스 부터 길이가 2인 문자열 비교

※ str.replace()
string& replace(size_t index, size_t len, const string& str1)
문자열의 index위치에서 len 길이까지의 범위를 매개변수로 들어온 str1전체로 대체하는 함수
string str = "__ddudi";
string str1 = "_blog_";
str.replace(0, 2, str1); = _blog_ddudi 
 - 0번째 인자부터 2개를 st1로 대체하게 된다

 

※ 추가

str.starts_with(문자열) str문자열에 대해 입력한 문자열이 시작 부터 일치 여부
str.ends_with(문자열) str문자열에 대해 입력한 문자열이 끝 부터 일치 여부
str.find_first_of(문자or문자열) 문자or문자열 중 첫 index부터 검색하여 하나라도 맞으면 해당 index 반환
없으면 쓰레기값 봔환
str.find_first_not_of(문자or문자열) 문자or문자열 중 첫 index부터 검색하여 없는 값을 찾아 해당 index 반환
모두 포함되면
-1 반환
str.find_last_of(문자or문자열) str.find_first_of(문자or문자열) 기능을 뒤에서부터 진행
str.find_last_not_of(문자or문자열) str.find_first_not_of(문자or문자열) 기능을 뒤에서부터 진행
알고 있으면 편하게 사용하실 수 있습니다. (개인적으로 한번도 사용해본적이 없음...)

 

728x90