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