[C++] 문자열 (String)

noobie·2024년 1월 11일

cpp

목록 보기
1/3

📌String 클래스

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과의 차이점

Stringchar[]
C++ STL에서 제공하는 클래스char의 배열 (기본 자료형)
메모리의 heap영역에 동적으로 할당메모리의 stack영역에 할당
문자열의 길이에 따라 메모리 조절 가능크기가 고정되어 있음
다양한 내장 함수 제공내장 함수 x
null문자가 들어가지 않음null 문자가 들어감

🔎 string class 사용법

헤더파일 : <string>

▶ string class 생성

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() : 맨 뒤 문자 반환

iterator

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를 소문자로 반환

profile
개발뉴비 누비 🐣

0개의 댓글