1.1 string 클래스는 문자들을 저장하는 컨테이너로 C, C++처럼 '\0' 문자를 요구하지 않기 때문에 C-style 문자열로 변환하려면 c+str() 멤버 함수를 사용합니다.
1.2 c_str() 멤버 함수는 '\0' 문자를 포함한 문자열 주소를 반환하며 data() 멤버 함수는 '\0' 문자를 포함하지 않은 문자열(배열) 주소를 반환합니다.
2.1 string 객체의 찾기 관련 함수가 실패하면 string::npos를 반환합니다.
2.2 string 객체는 vector처럼 메모리 재할당으로 발생하는 성능저하를 막기 위해 예약된 메모리 공간의 크기를 확인하려면 capacity() 멤버 함수를 사용할 수 있고 미리 메모리 공간을 예약하려면 reserve() 멤버 함수를 사용할 수 있습니다.
3.1 copy() 멤버 함수: 버퍼로 문자열을 복사
/*
copy() 멤버 함수
*/
#include <iostream>
#include <string>
using namespace std;
int main(void)
{
string s("Hello!");
char buf[100];
//주의점: copy() 끝에 '\0' 문자를 포함하지 않는다
s.copy(buf, s.length()); //length()는 size()와 같다
buf[s.length()] = '\0';
cout << "전체 문자열[copy(buf, n)]: " << buf << endl;
s.copy(buf, 4, 2);
buf[4] = '\0';
cout << "부분 문자열[copy(buf, n, off)]:: " << buf << endl;
return 0;
}
3.2 c_str() 멤버 함수: 문자열의 주소 반환
/*
c_str(), data() 멤버 함수
*/
#include <iostream>
#include <string>
using namespace std;
int main(void)
{
string s("Hello!");
const char *sz;
const char *buf;
sz = s.c_str();
buf = s.data();
cout << "'\\0' 문자로 끝나는 문자열(C-style): " << sz << endl;
cout << "'\\0' 문자 포함하지 않은 문자열 배열: ";
for (int i = 0; i < 6; i++)
cout << buf[i];
cout << endl;
return 0;
}
3.3 append() 멤버 함수: 문자열 덧붙힘
/*
append(), +=, push_back()
*/
#include <iostream>
#include <string>
using namespace std;
int main(void)
{
string s1("He");
string s2("He");
string s3("He");
string s4("He");
string s5("He");
string s6("He");
string s7("He");
string s8("He");
string s9("He");
string s10("He");
string t("llo!");
const char *p1 = "llo!";
const char *p2 = p1 + 4;
s1.append(t);
s2.append(t, 0, 4);
s3.append("llo!");
s4.append("llo!", 4);
s5.append(t.begin(), t.end());
s6.append(p1, p2);
s7.append(5, 'H');
s8 += t;
s9 += "llo!";
for (string::iterator iter = t.begin(); iter != t.end(); iter++)
s10.push_back(*iter);
//s:string 객체, sz:'\0' 문자열, c:문자, off:시작 위치, n:길이
//iter:반복자, p:포인터
cout << "s1.append(s): " << s1 << endl;
cout << "s2.append(s, off, n): " << s2 << endl;
cout << "s3.append(sz): " << s3 << endl;
cout << "s4.append(sz, n): " << s4 << endl;
cout << "s5.append(iter1, iter2): " << s5 << endl;
cout << "s6.append(p1, p2): " << s6 << endl;
cout << "s7.append(n, c): " << s7 << endl;
cout << "s8+=s: " << s8 << endl;
cout << "s9+=sz: " << s9 << endl;
cout << "s10.push_back(c): " << s10 << endl;
return 0;
}
3.4 replace() 멤버 함수: 문자, 문자열을 바꿈
/*
replace() 멤버 함수
*/
#include <iostream>
#include <string>
using namespace std;
int main(void)
{
string t("ABC");
string s1("Hello!");
string s2("Hello!");
string s3("Hello!");
string s4("Hello!");
string s5("Hello!");
string s6("Hello!");
string s7("Hello!");
string s8("Hello!");
string s9("Hello!");
string s10("Hello!");
s1.replace(0, 3, "ABC");
s2.replace(0, 3, t);
s3.replace(0, 3, "ABC", 2);
s4.replace(0, 3, t, 0, 2);
s5.replace(0, 3, 2, 'A');
s6.replace(s6.begin(), s6.begin() + 3, "ABC");
s7.replace(s7.begin(), s7.begin() + 3, t);
s8.replace(s8.begin(), s8.begin() + 3, "ABC", 2);
s9.replace(s9.begin(), s9.begin() + 3, 3, 'A');
s10.replace(s10.begin(), s10.end(), t.begin(), t.end());
//s:string 객체, sz:\0\ 문자열, c: 문자, pos:위치, n:길이, ct:개수
//iterb:;시작 반복자, itere:끝 반복자
cout << "s1.replace(pos, n, sz): " << s1 << endl;
cout << "s2.replace(pos, n, s): " << s2 << endl;
cout << "s3.replace(pos, n, sz, n2): " << s3 << endl;
cout << "s4.replace(pos, n, s, pos2, n2): " << s4 << endl;
cout << "s5.replace(pos, n, ct, c): " << s5 << endl;
cout << "s6.replace(iterb, itere, sz): " << s6 << endl;
cout << "s7.replace(iterb, itere, s): " << s7 << endl;
cout << "s8.replace(iterb, itere, sz, ct): " << s8 << endl;
cout << "s9.replace(iterb, itere, ct, c): " << s9 << endl;
cout << "s1.replace(iterb, itere, iterb2, itere2): " << s10 << endl;
return 0;
}
개발환경:Visual Studio 2017
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
[참고] 뇌를 자극하는 C++ STL
'C++ > 뇌를 자극하는 C++ STL' 카테고리의 다른 글
뇌를 자극하는 C++ STL 이것만은 알고 갑시다 11장 (0) | 2018.01.19 |
---|---|
뇌를 자극하는 C++ STL 이것만은 알고 갑시다 10장 (0) | 2018.01.12 |
뇌를 자극하는 C++ STL 이것만은 알고 갑시다 9장 (0) | 2018.01.11 |
뇌를 자극하는 C++ STL 이것만은 알고 갑시다 8장 (0) | 2018.01.11 |
뇌를 자극하는 C++ STL 이것만은 알고 갑시다 7장 (0) | 2018.01.08 |