1. string (#include <string>)
string: 문자열을 효율적으로 처리해주기 위한 class이다.
2. string 초기화
int main(void)
{
string s = "Alice";
string s1("Bee"); // s1 = Bee
string s2(s); // s2 = Alice
string s3(4, '0'); // s3 = 0000
string s4(s, 0, s.length() - 2); // s4 = Ali
string s5("12345", 3); // s5 = 123
return 0;
}
3. string 참조 방법
int main(void)
{
string s = "Alice";
cout << s[0] << '\n'; // = A
cout << s.at(1) << '\n'; // = l
cout << s.front() << '\n'; // = A
cout << s.back() << '\n'; // = e
const char* chars = s.c_str();
return 0;
}
string은 indexing 탐색이 가능하다.
at 함수를 이용한 탐색은 범위 밖 탐색에 대한 오류 체크가 존재하기 때문에 indexing 탐색보다 느리다.
4. string iterator & for문
int main(void)
{
string s = "Alice";
vector<char> v1(s.begin(), s.end()); // Alice
vector<char> v2(s.rbegin(), s.rend()); // ecilA
for (int i = 0; i < s.length(); i++)
cout << s[i]; // Alice
for (auto ch : s)
cout << ch; // Alice
return 0;
}
5. string operations
int main(void)
{
string s = "Alice";
s.insert(s.length(), " and Me"); // Alice and Me
s.insert(s.begin(), '*'); // *Alice and Me
string s2(" are friends.");
s.insert(s.end(), s2.begin(), s2.end()); // *Alice and Me are family.
return 0;
}
insert : char 혹은 string을 삽입하는 함수
첫번째 인자에 삽입될 위치를 offset(index) 혹은 iterator로 설정합니다.
두번째 인자에는 추가하고 싶은 char 혹은 string을 설정합니다.
이때, iterator를 사용하여 string을 삽입할 수도 있습니다.
int main(void)
{
string s = "ABCDEFG";
s.erase(1); // A
string s1 = "ABCDEFG";
s1.erase(1, 2); // ADEFG
s1.erase(s1.begin(), s1.end() - 1); // G
return 0;
}
erase : char 혹은 string을 제거하는 함수
erase(size_t off) : off를 포함하여 뒷부분을 모두 제거
erase(size_t off, size_t length) : off를 포함하여 length 만큼 뒷부분을 제거
erase(iterator start, iterator end) : [start ~ end) 영역만큼 제거
int main(void)
{
string s = "ABCDEFG";
s.erase(1); // A
string s1 = "ABCDEFG";
s1.erase(1, 2); // ADEFG
s1.erase(s1.begin(), s1.end() - 1); // G
return 0;
}
push_back(char) : 마지막 요소에 char를 추가하는 함수
pop_back() : 마지막 요소를 제거하는 함수
operator+= : 마지막 요소에 string을 추가하는 연산
append(string) : 마지막 요소에 string을 추가하는 함수
int main(void)
{
string s = "apple";
cout << s.compare("app") << endl; // 1
cout << s.compare("blue") << endl; // -1
string s1 = "123";
cout << s1.compare("1234") << endl; // -1
return 0;
}
compare: string과 비교하여 우선 순위를 반환하는 함수
apple.compare("blue")의 결과는 -1이다.
-1의 의미는 apple > blue 순이라는 의미이다.
apple.compare("app")의 결과는 1이다.
즉, app > apple 순이라는 의미이다.
중요한 것은 글자 수가 적은 쪽이 선택된다는 사실이다.
123.compare("1234")의 결과는 -1이다.
즉, 123 > 1234 순이라는 의미이다.
숫자로 이루어진 문자열 또한 글자 수가 적은 쪽이 선택된다.
int main(void)
{
string s = "blue";
s.replace(2, 2, "ack"); // black
s.replace(s.begin(), s.end() - 2, "du"); // duck
s = s.substr(1, 3); // uck
return 0;
}
replace(size_t off , size_t length, string str) : off를 포함하여 length 만큼 str로 대체
replace(iterator start, iterator end , string str) : [start ~ end) 영역만큼 str로 대체
substr(size_t off , size_t length) : off를 포함하여 length 만큼 해당하는 문자열을 반환
int main(void)
{
string s = "123123";
if (s.find("1234") == string::npos)
cout << "탐색 실패\n";
s.insert(s.find_first_of("123"), "0"); // 0123123
s.insert(s.find_last_of("123") + 1, "0"); // 01231230
return 0;
}
find(string str) : str이 처음으로 나타나는 offset을 반환
find_first_of(string str) : str이 처음으로 나타나는 offset을 반환
find_last_of(string str) : str이 마지막으로 나타나는 offset을 반환, 이때 str 마지막 문자에 해당하는 offset이 적용된다.
위 함수들은 탐색 실패 시, string::npos를 반환한다.
'IT > 알고리즘' 카테고리의 다른 글
[C++] 버블 정렬 (Bubble Sort) (0) | 2023.10.22 |
---|---|
[C++] 선택 정렬 (Selection Sort) (0) | 2023.10.22 |
[C++] Map Container (0) | 2023.09.10 |
[C++] set, multiset, unordered_set (0) | 2023.09.10 |
[C++] Linked List, Vector, Deque (0) | 2023.09.05 |