C++ 문자열 클래스(string)
기존 C언어에서는 문자열을 다루기 위해서는 char[] 배열을 사용하였습니다. 그리고 끝에 null문자 '\0'을 넣어줌으로써 문자열이 끝이났다는것을 판별하였죠. 이렇게 사용하다보니 문자열 길이도 신경써줘야 하고 사용하는 과정에서 문자열도 자주 깨지는 등의 불편한 점이 굉장히 많았습니다. 이와 같은 불편함을 줄이기 위해 C++에서는 Java나 Python과 같이 문자열을 다루는 string 클래스를 만들어 사용할 수 있게끔 되었습니다. string 클래스에서는 문자열을 객체로 다룹니다. 사용하기 편리해진 만큼 컴퓨터가 해야할 일이 많아졌다는 것을 뜻합니다. string클래스를 사용하면 char[] 배열을 사용하는 방식보다는 다소 느려지는것은 어쩔수 없는 부분이긴 합니다. 하지만 개발 과정에서 워낙에도 편리하다보니 char[] 배열보다는 점차 많이 사용하는 추세인듯 합니다.
string 클래스의 장점
1. 문자의 끝에 null문자(‘\0’) 등이 포함되지 않는다.
2. 문자열의 길이를 신경쓸 필요가 없다.
3. 객체로써 블록이 끝나는 시점에 소멸자가 호출되어 메모리 릭을 걱정할 필요가 없다.
4. 마치 배열처럼 한 문자씩 다룰 수 있다.
5. 연산자 오버로딩이 되어 있어 연산자들로 다양한 문자열 연산이 가능하다.
6. string 클래스의 다양한 메소드를 통해 문자열 가공이 쉽다.
string 클래스 사용법
string 선언
#include <string> //string 클래스 포함 헤더
#include <iostream> //iostream안에 string헤더가 포함되어있음
using namespace std;
//생성과 동시에 초기화
string 변수명("넣을문자열");
//생성한 후 초기화
string 변수명
문자열변수 = "넣을문자열";
//문자열 복사
string str2(str1); //문자열 str2를 선언과 동시에 str2의 값을 복사해서 넣음
먼저 string 클래스를 사용하려면 string 헤더를 포함해야합니다. iostream 헤더를 사용하시는 분이라면 이 안에 string 헤더가 포함되어 있으니 둘 중 하나만 포함하셔도 무방합니다.
문자열을 선언하시는 방법은 크게 위의 3가지 방법이 있는데 생성과 동시에 초기화 시키시거나 생성한 후 나중에 초기화 시키시거나 생성시 다른 문자열의 값을 넣어서 초기화 하는 방법 이렇게 3가지가 있습니다.
string 입출력
string str; //문자열 선언
cin >> str; //공백(space) 이전까지의 문자열 입력
getline(cin, str); //공백 포함 한 줄 전체 입력
cout << str; //문자열 출력
일반 변수들과 마찬가지로 string객체도 cin, cout을 활용하여 문자열을 간편하게 입출력 할 수 있습니다.
string 문자열 값 반환
string str = "Hello World"; //문자열 선언
cout << str.at(4) << endl; //at(index): 문자열 index 위치의 문자를 반환
cout << str[4] << endl; //문자열[index]: 배열처럼 index의 위치의 문자를 반환
cout << str.front() << endl; //문자열 맨 앞의 문자를 반환
cout << str.back() << endl; //문자열 맨 끝의 문자를 반환
문자열을 배열처럼 []을 활용하여 접근하거나 at() 메서드를 활용하여 문자열 index의 문자의 값을 얻을 수 있습니다. 또한 문자열 가장 첫번째의 값을 front함수로, 가장 마지막 값을 back()함수로 문자를 반환받을 수 있습니다.
string 크기 반환
string str = "Hello World"; //문자열 선언
cout << str.length() << endl; //문자열의 길이를 반환
cout << str.size() << endl; //문자열이 사용하고 있는 Size를 반환
cout << str.capacity() << endl; //문자열에 할당된 메모리 크기 반환
size와 length는 단순히 문자열의 길이를 반환하는 함수라고 생각하시면 되고 문자열은 크기가 증가할 가능성이 있기 때문에 실제로 가지고있는 문자열의 길이보다 더 큰 크기를 메모리에 할당하는데 이 크기를 capacity라고 하며 capacity()함수를 활용하여 이 크기도 반환받을 수 있습니다.
string 가공 함수
string str = "Hello World"; //문자열 선언
str.append("붙일 문자열"); //문자열뒤에 문자열을 붙임
str.append("붙일 문자열",2,3); //append("str",n,m): 문자열뒤에 붙일 문자열의 인덱스 n부터 m개의 문자를 붙임
str.append(2,'문자'); //append(n,'문자'): 문자열 뒤에 문자를 n개만큼 붙임
str.insert(2, "삽입할 문자열"); //insert(n,"str"): 문자열 index n 뒤에 문자열 삽입
str.replace(2,3,"대체할 문자열"); //replace(n,m,"str"): 문자열 index n 부터 k개의 문자를 치환
str.clear(); //문자열 초기화
str.erase(); //문자열 전체 지우기
str.erase(5); //earse(n): 문자열 index n까지 지우기
str.push_back('문자'); //문자열 맨 뒤에 '문자'를 추가
str.pop_back(); //문자열 맨 끝 문자 제거
str.assign("재할당 문자열"); //assign("str"): 문자열 전체를 재 할당
string클래스에서 제공하는 다양한 문자열 가공 함수들로 문자열을 쉽게 가공(추가, 삭제, 수정) 할 수 있습니다.
string 기타 함수
string str = "Hello World"; //문자열 선언
str.empty(); //empty(): 문자열 비어있는지 확인 (비었으면 true 아니면 false)
str.find("찾을 문자열"); //문자열에서 문자열을 찾은뒤 index 반환
str.find("찾을 문자열",3); //find(찾을 문자열,n): n번째 index부터 문자열을 찾은뒤 index 반환
str.substr(); //문자열 전체를 반환
str.substr(3); //substr(n) n번째 index부터 문자열 끝까지 반환
str.substr(3, 7); //substr(n,k) n번째 index부터 k까지 문자열 반환
str.compare("비교 문자열"); //문자열 비교(같으면 0, 비교할 문자열이 작으면1, 크면 -1 반환)
str.resize(5); //resize(n) : 문자열을 n의 크기로 만듬
str.resize(5, 'a'); //resize(n,'문자') 문자열을 n의 크기로 만들고 문자로 채움
str.shrink_to_fit(); //문자열의 크기을 문자열의 길이만큼 줄인다.
str.reserve(5); //reserve(n) : n만큼 메모리를 미리 할당
string str2 = "Hello Korea"; //문자열 선언
swap(str, str2); //문자열 Swap
이 외에도 문자열을 손쉽게 다룰 수 있도록 string클래스에서 위와 같이 다양한 함수들을 제공합니다.
'Language > C , C++ , C#' 카테고리의 다른 글
[C언어] C언어로 만든 간단한 슈팅게임 (+ 소스 코드) (4) | 2022.02.03 |
---|---|
[C++] 예외 처리 (Exception Handling) try, catch ,throw (0) | 2021.03.03 |
[C++] 연산자 오버로딩에 대하여 (0) | 2021.02.26 |
[C++] 복사 생성자, 복사 대입 연산자 (+깊은 복사) (0) | 2021.02.25 |