목차
- 초기화
- 입력
- 인터페이스
string class 초기화
string 사용법
- string 클래스를 사용하기 위해선 string.h 또는 cstring의 헤더파일을 추가해야한다.
- string 클래스는 일반적으로 std:: 표준 라이브러리의 네임스페이스에 정의되어있다.
table
생성자 | 설명 |
string() | 크기가 0인 디폴트 string 객체를 생성한다. (디폴트 생성자) |
string(const char* s) | string 객체를 s가 가리키는 문자열로 초기화한다. |
string(size_type n, char c) | 문자 c로 초기화된 n개의 string객체를 생성한다. |
string(const string& str) | str객체로 복사 생성자를 호출해서 초기화한다. |
string(const char* s, size_type n) | string 객체를 초기화 |
template<class Iter> string(Iter begin, Iter end) |
string 객체를 [begin, end)의 범위에 있는 값들로 초기화한다. begin, end는 포인터의 역할이며 위치를 가리킨다. begin의 범위는 포함하고 end는 포함하지 않는 end 바로 앞까지를 의미한다. |
string(const string& str, size_type pos, size_type n = npos) | string 객체를 string 객체의 str로 초기화한다. str에 있는 pos 위치에서부터 str의 끝까지 가거나, n 문자를 사용하되 str의 끝을 넘어갈 수 없다. |
string(string&& str) noexcept | string 객체를 string 객체 str로 초기화한다. (move 생성자) |
string(initializer_list<char> il) | string 객체를 초기자 목록 il에 있는 문자로 초기화한다. |
test code
#include <iostream>
#include <cstring> // string class
int main(void)
{
using namespace std;
const char* ch = "string class";
char ch2[6] = { 'b', 'a', 'n', 'a', 'n', 'a' };
// 크기가 0인 string 객체 생성
string str1();
// 문자열로 초기화
string str2("Programming");
string str3(ch);
// n개의 문자 c로 초기화
string str4(5, 't');
// 복사생성자를 통한 초기화
string str5(str2);
// n까지의 문자열만 복사해서 초기화
string str6("my name is Fubao", 5);
string str7("my name is Fubao", 20);
string str8(str7, 5);
// += , + 오버로딩
string str9 = str6 + str2;
str9 += str2;
// ch2 배열 인덱스를 이용한 초기화
string str10(&ch2[3], &ch2[5]);
// 상수 문자열 범위를 이용한 초기화
string str11(&ch[0], &ch[4]);
// 이터레이터 포인터를 이용하여 초기화
string str12(str2.begin(), str2.end() - 3);
// string객체를 이용해서 10개의 문자를 복사하며 n번째 위치(5)부터 시작한다.
string str13(str7, 3, 10);
return 0;
}
ouput
string class 입력
입력
cstdlib 헤더파일에 있는 getline 함수를 이용해서 버퍼에 있는 \n 개행 문자를 비우고 한 행을 읽을 수 있다. \n 개행 문자 대신 다른 문자를 넣어서 해당 문자를 제외한 문자열을 입력받는 형태도 가능하다.
#include <iostream>
#include <string> // string
#include <cstdlib> // getline
int main(void)
{
using namespace std;
string str;
getline(cin, str); // \n 개행문자는 버려진다
string str1;
getline(cin, str1, ':'); // : 문자를 만날때까지 읽는다.
return 0;
}
- 위 코드처럼 : 가 구분 문자로 지정되면 개행 문자는 그냥 일반 문자가 된다.
- cin >> str을 하게되면 개행문자가 남게되는데 이를 지워주기 위해선 다음 코드를 사용하면 된다.
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
string class 인터페이스
string 인덱스 접근 메서드
사용 방법 | 설명 |
s.at(n) | string 문자열의 i번째 참조(범위검사 함) |
s.[n] | string 문자열의 i번째 참조(범위검사 안함) |
s.front() | string 문자열의 첫번째 요소 반환(char type) |
s.back() | string 문자열의 마지막 요소 반환(char type) |
s.c_str() | string 문자열을 const char* 로 접근할 수 있도록 해준다('\0' 문자 포함) |
여기서 범위 검사는 허용되는 크기를 넘어선 숫자가 들어올 경우 검사를 통해 예외를 던지는지 안던지는지 여부이다.
at은 범위를 넘어선 값이 들어올 경우 std::out_of_range의 예외를 던진다. 반면 범위 검사를 하지않는 []의 경우 컴파일 단계에서 디버깅이 된다.
String 이터레이터 메서드
메서드명 | 설명 |
s.begin() | string의 시작 주소 반환 |
s.end() | string의 (마지막 + 1) 주소 반환 |
s.rbegin() | string의 마지막 주소를 반환 |
s.rend() | string의 (첫번 째 - 1 ) 주소 반환 |
String Capacity (크기 확인)
메서드명 | 설명 |
s.empty() | string이 비어있으면 true, 아니면 false 반환 |
s.size(), s.length() | string에 들어있는 요소에 대한 길이 반환 |
s.capacity() | string에 할당된 실제 크기 반환 |
s.max_size() | string에 할당될 수 있는 최대 메모리 크기 반환 |
s.reserve(숫자) | 해당 숫자만큼 capactiy 길이를 설정 |
s.shrink_to_fit() | 잔여 capacity 공간을 조절해 준다. |
- size()와 length()의 차이점은 length()는 오래된 버전부터 사용해오던 함수이고 size()는 STL과의 호환성을 위해 추가된 버전이다. 기능상의 차이는 없다
String 인터페이스
메서드명 | 설명 |
s.clear() | s에 있는 값들을 지워준다. (size = 0) |
s.insert() | s에 사용자가 원하는 위치에 문자 삽입 가능 |
s.erase() | s문자열 중 사용자가 원하는 부분 삭제 |
s.push_back() | s문자열 뒤에 단어 추가. (문자열 X, 문자 O) |
s.pop_back() | s문자열 맨 뒤 단어 하나 삭제. (s.size() - 1) |
s.operator += | 문자열 뒤에 문자열 추가 가능 |
s.append() | 문자열 뒤에 문자열 추가 가능 |
s.compare() | 문자열 비교 함수 |
s.replace() | 문자열 수정 |
s.substr() | 문자열 중 원하는 부분을 잘라서 넘겨준다. |
s.copy() | s문자열을 (char [])형식의 배열 변수에 복사 |
s.resize() | s문자열 길이를 수정 |
s.swap() | s문자열과 다른 문자열을 서로 바꿈 |
s.starts_with(문자열) | s문자열에 대해 입력한 문자열이 시작 위치부터 동일한지 여부 |
s.ends_with(문자열) | s문자열에 대해 입력한 문자열이 끝 위치부터 동일한지 여부 |
String Search (문자 찾기)
메서드명 | 설명 |
find(문자 or 문자열) | 찾은 index값을 정수형태로 넘겨준다. 못찾으면 -1을 반환 |
rfind(문자 or 문자열) | find와 동일하지만 뒤에서부터 찾는다. |
find_first_of(문자 or 문자열) | 문자 or 문자열 중 첫 index부터 검색해서 하나라도 맞으면 해당 index 값을 반환. 못찾으면 쓰레기값 반환(npos) |
find_first_not_of(문자 or 문자열) | 문자 or 문자열 중 첫 index부터 검색해서 없는 값을 찾아내 해당 index를 반환. 모두 포함되 있다면 -1 반환 |
find_last_of(문자 or 문자열) | 문자 or 문자열 중 마지막 index부터 검색해서 하나라도 맞으면 해당 index 값을 반환. 못찾으면 쓰레기값 반환(npos) |
find_last_not_of(문자 or 문자열) | 문자 or 문자열 중 마지막 index부터 검색해서 없는 값을 찾아내 해당 index를 반환. 모두 포함되 있다면 -1 반환 |
인터페이스 내용 출처
https://hwan-shell.tistory.com/120
'과거 자료' 카테고리의 다른 글
[#2] STL :: Vector Template Class (0) | 2022.08.25 |
---|---|
[#1] 표준 템플릿 라이브러리(STD; Standard Template Library) (0) | 2022.08.25 |
[#11] Counting Sort : 계수 정렬, 카운팅 정렬 (0) | 2022.08.19 |
[#10] Quick Sort : 퀵 정렬 (0) | 2022.08.16 |
[#9] Insert Sort : 삽입 정렬 (0) | 2022.08.14 |