본문 바로가기

고급C,C++

string 클래스


문자열 처리 함수들은 string.h(C++에서는 cstring)을 통하여 지원한다.
string 클래스는 string헤더 파일을 통해 지원된다.(string.h와 cstring 헤더 파일은, string클래스가 아니라 C스타일의 문자열을 처리하는 C 라이브러리 문자열 함수들을 지원하는 것이다.)
  • 문자열 생성
    • string(const char * s)
      string 객체를 s가 지시하는 NBTS로 초기화 한다.
    • string(size_type n, char c)
      문자 c로 모두 초기화된 원소 n개의 string 객체를 생성한다.
    • string(const string & str, size_type pos = 0, size_type n = npos)
      string 객체를 size_type pos = 0 으로 초기화한다. 객체 str은 str의 pos 위치부터 시작하고, str의 끝까지 가거나 n개의 문자를 사용한다. 둘 중 먼저 끝나는 것을 사용한다.
    • string()
      크기가 0인 디폴트 string 객체를 생성한다.
    • string(const char * s, size_type n)
      string 객체를 s가 지시하는 NBTS로 초기화하되, NBTS의 크기를 초과하더라도 n개의 문자까지 진행한다.
    • template<class Iter>
      string(Iter begin, Iter end)
      string 객체를 [begin, end)의 범위에 있는 값들로 초기화한다. begin과 end는 포인터와 비슷한 역할을 하여 위치를 지정한다. 그 범위는 begin을 포함하고 end를 포함하지 않는 end 바로 앞까지를 의미한다.

//str1.cpp -- string 클래스를 소개한다.
#include <iostream>
#include <string>
//string 생성자를 사용한다.

int main()
{

using namespace std;
string one("Lottery Winner!");
cout<<one<<endl;
string two(20,'$');
cout<<two<<endl;
string three(one);
cout<<three<<endl;
one += " Oops!";
cout<<one<<endl;
two = "Sorry! That was ";
three[0] = 'P';
string four;
for = two + three;
cout<<four<<endl;
char alls[] = "All's well that ends well";
string five(alls, 20);
cout<<five<<"!\n";
string six(alls + 6, alls + 10);
cout<<six<<",";
string seven(&five[6], &five[10]);
cout<<seven<<"...\n";

return 0;
}


  • string 클래스 입력
    • 어떤 클래스에 대해 사용할 수 있는 입력 옵션들을 알면 유용하다. C 스타일의 문자열에 대해서는 세가지 입력 옵션을 사용할 수 있다.
      char info[100];
      cin>>info; //한 단어를 읽는다.
      cin.getline(info,100); //한 행을 읽되, \n은 내버린다.
      cin.get(info,100); //한 행을 읽되, \n을 큐에 남겨둔다.

    • string 객체의 경우에는 두 가지 옵션을 사용할 수 있다.
      string stuff;
      cin>>stuff; //한 단어를 읽는다.
      getline(cin,stuff); //한 행을 읽되, \n은 내버린다.
    • getline()의 두 버전은 입력을 구분하는 용도로 어느 문자를 사용할 것인지를 지정하는 선택적 전달인자를 허용한다.
      cin.getline(info, 100, ':'); //:까지 읽고, :은 내버린다.
      getline(stuff, ':'); // :까지 읽고, :은 내버린다.
    • 동작상의 주요한 차이는, string 버전들은 입력 문자들을 담을 수 있또록 타깃 string 객체의 크기를 자동으로 조절한다는 것이다.
      char fname[10];
      string lname;
      cin>>fname; //입력이 9개 문자보다 크면 문제가 생길 수 있다.
      cin>>lname; //매우 긴 워드를 읽을 수 있다.
      cin.getline(fname,10);  //입력이 잘릴 수도 있다.
      getline(cin,fname); //잘림 없음
    • 자동크기 조절 기능은, getline()의 string버전이, 읽을 입력 문자들의 개수를 제한하는 수치 매개변수를 먼제하는 것을 허용한다.