Updated:

4 minute read

개요

  • 문자 시퀀스를 저장하고 조작하는 클래스
  • 멤버 함수
    • element access
      • at()
        • 경계 검사를 사용하여 지정된 문자에 접근
      • operator[]
        • 지정된 문자에 접근
      • front()
        • C++11
        • 첫 번째 문자에 접근
      • back()
        • C++11
        • 마지막 문자에 접근
      • data()
        • 문자열의 첫 번째 문자에 대한 포인터를 반환
      • c_str()
        • 문자열의 수정 불가능한 표준 C 문자 배열을 반환
    • iterators
      • begin()
        • 반복자의 처음을 반환
      • cbegin()
        • C++11
        • 반복자의 처음을 상수 형태로 반환
      • end()
        • 반복자의 끝을 반환
      • cend()
        • C++11
        • 반복자의 끝을 상수 형태로 반환
      • rbegin()
        • 역방향 반복자의 처음을 반환
      • crbegin()
        • C++11
        • 역방향 반복자의 처음을 상수 형태로 반환
      • rend()
        • 역방향 반복자의 끝을 반환
      • crend()
        • C++11
        • 역방향 반복자의 끝을 상수 형태로 반환
    • capacity
      • empty()
        • 문자열이 비어있는지 확인
      • size()/length()
        • 문자 수를 반환
      • max_size()
        • 최대 문자 수를 반환
      • reserve()
        • deprecated in C++20
        • shrink_to_fit()를 권장
        • 스토리지 할당 관리를 위한 예약된 크기를 변경
      • capacity()
        • 현재 할당된 스토리지에 할당할 수 있는 문자 수 반환
      • shrink_to_fit()
        • C++11
        • 사용하지 않는 메모리를 해제
    • operations
      • clear()
        • 내용 삭제
      • insert()
        • 문자 삽입
      • erase()
        • 문자 삭제
      • push_back()
        • 끝에 문자 추가
      • pop_back()
        • C++11
        • 마지막 문자 삭제
      • append()
        • 끝에 문자 추가
      • operator+=
        • 끝에 문자 추가
      • compare()
        • 두 문자열 비교
      • starts_with()
        • C++20
        • 문자열이 주어진 접두사로 시작하는지 여부 반환
      • ends_with()
        • C++20
        • 문자열이 주어진 접미사로 끝나는지 여부 반환
      • replace()
        • 문자열의 지정된 부분을 변경
      • substr()
        • 지정된 부분의 문자열 반환
      • copy()
        • 문자 복사
      • resize()
        • 저장된 문자수 변경
      • swap()
        • 내용을 변경
    • search
      • find()
        • 문자열에서 문자 검색


예제

  • 코드
     #include <algorithm>
     #include <iostream>
     #include <string>
        
     using namespace std;
        
     int main() {
     	auto element_access = []() {
     		string s = "abc";
        
     		cout << "s[2] : " << s[2] << endl;
     		cout << "s[3] : " << s[3] << endl;
        
     		cout << "s.at(2) : " << s.at(2) << endl;
     		try {
     			cout << "s.at(3) : " << s.at(3) << endl;
     		} catch (exception &e) {
     			cout << e.what() << endl;
     		}
        
     		cout << "s.front() : " << s.front() << endl;
        
     		cout << "s.back() : " << s.back() << endl;
        
     		cout << "s.data() : " << s.data() << endl;
        
     		cout << "s.c_str() : " << s.c_str() << endl;
     	};
     	element_access();
        
     	cout << endl << "------" << endl << endl;
        
     	auto iterators = []() {
     		string s = "abc";
        
     		*s.begin() = 'A';
     		cout << "*s.begin() = 'A'; : " << s << endl;
        
     		// *s.cbegin() = 'a';
        
     		*(s.end() - 1) = 'C';
     		cout << "*(s.end() - 1) = 'C'; : " << s << endl;
        
     		// *s.cend() = 'a';
        
     		*s.rbegin() = '3';
     		cout << "*s.rbegin() = '3'; : " << s << endl;
        
     		// *s.crbegin() = '3';
        
     		*(s.rend() - 1) = '1';
     		cout << "*(s.rend() - 1) = '1'; : " << s << endl;
        
     		// *s.crend() = '1';
        
     		for (auto iter = s.begin(); iter < s.end(); ++iter) {
     			cout << *iter << " ";
     		}
     		cout << endl;
     	};
     	iterators();
        
     	cout << endl << "------" << endl << endl;
        
     	auto capacity = []() {
     		string s = "";
        
     		cout << "s.empty() : " << s.empty() << endl;
     		s = "abc";
     		cout << "s.empty() : " << s.empty() << endl;
        
     		cout << "s.size() : " << s.size() << endl;
     		cout << "s.length() : " << s.length() << endl;
        
     		cout << "s.max_size() : " << s.max_size() << endl;
        
     		cout << "s.capacity() 1 : " << s.capacity() << endl;
        
     		s.reserve(100);
     		cout << "s.capacity() 2 : " << s.capacity() << endl;
        
     		s.reserve();
     		cout << "s.capacity() 3 : " << s.capacity() << endl;
        
     		s.reserve(100);
     		cout << "s.capacity() 4 : " << s.capacity() << endl;
        
     		s.shrink_to_fit();
     		cout << "s.capacity() 5 : " << s.capacity() << endl;
     	};
     	capacity();
        
     	cout << endl << "------" << endl << endl;
        
     	auto operations = []() {
     		string s = "abc";
        
     		s.clear();
     		cout << "s.empty() : " << s.empty() << endl;
        
     		s.insert(0, "a");
     		cout << "s 1 : " << s << endl;
        
     		s.insert(1, 2, 'b');
     		cout << "s 2 : " << s << endl;
        
     		s.erase(2, 1);
     		cout << "s 3 : " << s << endl;
        
     		s.push_back('c');
     		cout << "s 4 : " << s << endl;
        
     		s.pop_back();
     		cout << "s 5 : " << s << endl;
        
     		s.append(2, 'c');
     		cout << "s 6 : " << s << endl;
        
     		s += "e";
     		cout << "s 7 : " << s << endl;
        
     		cout << s.compare("abcce") << endl;
     		cout << s.compare("ab") << endl;
     		cout << s.compare("abccea") << endl;
        
     		cout << s.starts_with("ab") << endl;
     		cout << s.starts_with("b") << endl;
        
     		cout << s.ends_with("ce") << endl;
     		cout << s.starts_with("c") << endl;
        
     		cout << s.replace(3, 1, "d") << endl;
        
     		cout << s.substr(1, 2) << endl;
        
     		char c[10]{};
     		cout << s.copy(c, sizeof(c)) << endl;
     		cout << c << endl;
        
     		s.resize(3);
     		cout << "s 8 : " << s << endl;
        
     		s.resize(5, '!');
     		cout << "s 9 : " << s << endl;
        
     		string s2 = "123";
     		s2.swap(s);
     		cout << "s 10 : " << s << ", s2 : " << s2 << endl;
     	};
     	operations();
        
     	cout << endl << "------" << endl << endl;
        
     	auto search = []() {
     		string s = "abcdef";
        
     		if (s.find("bc") != string::npos) {
     			cout << "find" << endl;
     		}
     	};
     	search();
        
     	return 0;
     }
    
  • 실행 결과
     s[2] : c
     s[3] :
     s.at(2) : c
     s.at(3) : basic_string::at: __n (which is 3) >= this->size() (which is 3)
     s.front() : a
     s.back() : c
     s.data() : abc
     s.c_str() : abc
        
     ------
        
     *s.begin() = 'A'; : Abc
     *(s.end() - 1) = 'C'; : AbC
     *s.rbegin() = '3'; : Ab3
     *(s.rend() - 1) = '1'; : 1b3
     1 b 3
        
     ------
        
     s.empty() : 1
     s.empty() : 0
     s.size() : 3
     s.length() : 3
     s.max_size() : 9223372036854775807
     s.capacity() 1 : 15
     s.capacity() 2 : 100
     s.capacity() 3 : 15
     s.capacity() 4 : 100
     s.capacity() 5 : 15
        
     ------
        
     s.empty() : 1
     s 1 : a
     s 2 : abb
     s 3 : ab
     s 4 : abc
     s 5 : ab
     s 6 : abcc
     s 7 : abcce
     0
     3
     -1
     1
     0
     1
     0
     abcde
     bc
     5
     abcde
     s 8 : abc
     s 9 : abc!!
     s 10 : 123, s2 : abc!!
        
     ------
        
     find