C++/뇌를 자극하는 C++ STL

뇌를 자극하는 C++ STL 이것만은 알고 갑시다 12장

꾸준함. 2018. 1. 19. 15:11

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

반응형