문자열 처리 함수들은 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버전이, 읽을 입력 문자들의 개수를 제한하는 수치 매개변수를 먼제하는 것을 허용한다.