서적 정리/C++ 기초 플러스
14.string 클래스
민돌이2
2022. 7. 29. 23:04
string 클래스는 문자열을 저장하는 데 문자 배열을 사용한 대신에 간편하게 상요할 수 있는 데이터형이다. char의 배열과 가장 큰 차이점은 string은 단순한 변수로 선언한다는 점이다. 또한, 문자열의 크기를 자동으로 조절한다. 즉, 크기가 동적으로 확장/축소하는 문자 배열의 변수라고 생각할 수 있다.
C++11 문자열 초기화
C++11에서 string의 초기화하는 법은 다양하다.
std::string str1 = "minju";
std::string str2 = { "minju" };
std::는 using 선언을 통해 생략할 수 있다.
대입, 결합, 추가
string 객체를 다르 string 객체에 간단하게 대입할 수 있다.
std::string str1 = "minju";
std::string str2;
str2 = str1; //대입
string 객체간의 + 연산자를 사용하여 다수의 string 객체를 하나로 결합할 수 있다. += 연산자도 가능하다.
int main()
{
using namespace std;
string str1 = "Hello";
string str2 = " World!";
string str3;
str3 = str1 + str2;
str1 += " Minju";
cout << str1 << endl;
cout << str3 << endl;
return 0;
}
string 클래스의 조작
C++에 string 클래스가 추가되기 전에도, 문자열 대입과 같은 조작들을 수행할 필요가 있었다. C 라이브러리에 있는 함수들을 사용하여 C 스타일의 문자열들을 대상으로 수행하였고, string.h 헤더 파일은 cstring 헤더 파일이 되어 이 함수들을 지원한다.
strcpy(charr1, charr2); //charr2를 charr1에 복사한다.
strcat(charr1, charr2); //charr2의 내용을 charr1에 추가한다.
하지만 위 코드는 허점이 존재한다.
char site[10] = "house;
strcat(site, " of pancakes"); //메모리 문제 발생
site 변수는 10개의 원소를 갖고 있지만, house of pancakes는 17개이다. 즉, 메모리 문제가 발생한다. 이 방법을 회피하기위에 strncpy(), strncat() 함수가 존재한다. 매개변수에 타깃 배열의 최대 허용 크기를 대입하는데, 코드의 길이가 더 길어지고 복잡해질 수 있다.
char site[10]= "house";
int len = strlen(site);
strncat(site, " of pancakes", len);
반면에 string 클래스는 크기를 자동으로 조절하여 이런 문제를 피한다.
728x90