C++ 의 STL 에서 제공하는 문자열을 다루는 클래스이다.
비슷하게 문자열을 다루는 char, char*, char[] 등과의 차이점을 먼저 알아보겠다!
❔char
- char
1-byte의 문자를 저장하는 데 사용하는 자료형- char*
문자열을 저장하고 처리할 수 있는 자료형
ex)char* str = "Hello";에서, str은 "Hello" 라는 문자열의 첫 번째 문자 'H' 를 가리키는 포인터이며, 이를 통해 문자열 전체에 접근할 수 있다.
char*는 문자열의 주소를 가리킬뿐, 실제 데이터를 포함하지는 않는다.
또한, 문자열의 수정이 불가능하다.- char[]
문자열을 배열의 형태로 저장하고 처리할 수 있는 자료형
각 문자가 배열의 각 요소에 저장된다.
ex)char str[] = "Hello";
-> char[0] = 'H' , char[1] = 'e' ... char[5] = '\0'
❗char[] 에서 문자열의 끝에는 null문자('\0')가 추가되는데, 이는 문자열의 끝을 나타내며, 문자열의 길이를 판단할 수 있게 한다.
char*과 달리 char[] 는 문자열에서 각 문자에 접근할 수 있어 문자열을 수정할 수 있다.
❕ char[] 과 String과의 차이점
String char[] C++ STL에서 제공하는 클래스 char의 배열 (기본 자료형) 메모리의 heap영역에 동적으로 할당 메모리의 stack영역에 할당 문자열의 길이에 따라 메모리 조절 가능 크기가 고정되어 있음 다양한 내장 함수 제공 내장 함수 x null문자가 들어가지 않음 null 문자가 들어감
헤더파일 : <string>
string str : 빈 문자열 str 선언
string str = "hello" : "hello" 라는 str 생성
string str("hello") : "hello" 라는 str 생성
string *str = new string("hello") : 동적할당
char s[] = {'a','b','c'} : char[] 과 호환 가능
string str(s)
<,> : 문자열에서의 사전상 순서를 비교 가능
ex)
string str1 = "abc";
string str2 = "bbb";
cout<<(str1 < str2) <<endl;
-> output : 1
사전상의 순서에서 a가 b보다 앞이므로 true
== : 두 문자열이 일치하는지 확인 가능
ex)
string str1 = "aaa";
string str2 = "aaa";
cout<<(str1==str2)<<endl;
->output : 1
(aaa와 aaa가 일치)
+ : 두 문자열 연결
ex)
string str1 = "hello";
string str2 = "world";
string str3 = str1 + str2;
cout<<str3<<endl;
->output : hello world
= : 한 문자열을 다른 문자열에 할당
string str1 = "hello";
string str2 = str1;
cout<<str2<<endl;
->output : hello
str.at(1): (index=1) 위치의 문자 반환. 유효 범위인지 확인 가능
str[1] : 1 위치의 문자 반환. at과 달리 유효 범위인지 체크하지 않지만, 더 빠르다.
str.front() : 맨 앞 문자 반환
str.back() : 맨 뒤 문자 반환
str.begin() : 문자열의 첫번째 문자를 가리키는 반복자 반환
str.end() : 문자열의 마지막 문자 다음을 가리키는 반복자 반환
str.length() : str의 길이 반환
str.size() : str의 길이 반환
str.capacity() : 사용중인 메모리의 크기 반환
str.resize(n) : str의 크기를 n으로 바꾼다. 기존 문자열이 n보다 작으면 나머지를 빈 공간으로 채우고, n보다 크면 n개 이후의 문자는 삭제한다.
str.resize(n,'a') : str의 크기를 n으로 바꾸고, 빈 공간을 a 로 채운다.
str.shrink_to_fit(): str의 capacity 가 실제 사용 메모리보다 크면, 메모리를 줄여준다.
str.reserve(n) : n만큼의 메모리를 미리 할당
str.empty() : str이 빈 문자열인지 확인
str.append(str2) : str뒤에 str2을 붙임 (+ 와 같은 기능)
str.append(str2,n,m) : str뒤에 str2의 index=n 부터 m 까지의 문자를 붙임
str.append(n,'a') : str뒤에 n개의 'a'를 붙임
str.insert(n,str2) : index=n 앞에 str2 를 삽입
str.replace(n,k,str2) : index=n 부터 k개의 문자를 str2로 대체
str.clear() : 모든 문자 삭제
str.erase(n,m) : index=n부터 m개의 문자 삭제
str.erase() : 모든 문자 삭제
str.push_back(c) : str뒤에 문자 c 붙임
str.pop_back() : str 맨 뒤 문자 삭제
str.assignt(str2) : str에 str2 문자열 할당
str.find("abc"): "abc" 가 str에 포함되어 있는지 확인, index 반환
str.find("abc",n) : index = n 부터 "abc"가 포함되어 있는지 확인
str.substr() : str전체 반환
str.substr(n) : index=n부터 끝까지의 문자를 문자열로 반환
str.substr(n,k) : index=n 부터 k개의 문자를 문자열로 반환
str.compare(str2) : str과 str2 가 같은지 비교. 같으면 0. str<str2 -> 음수, str>str2 -> 양수 반환
swap(str1,str2): str1과 str2 swap
isdigit(c) : c가 숫자면 true 아니면 false
isalpha(c) : c가 알파벳이면 true, 아니면 false
toupper(c) : c를 대문자로 반환
tolower(c) : c를 소문자로 반환