[C++] STL String

chooha·2025년 1월 8일

C++

목록 보기
5/22

1. 객체 생성

//빈 문자열 생성
string str;

string str1 = "apple";

string str2;
str2 = "banana";

string str3("peach");

string str4(str3);

char s[] = { 'm', 'a', 'n', 'g', 'o'};
string str5(s);

// 동적 할당
string* str6 = new string("grape");

2. 입/출력 방법

char*나 char[]와 다르게 문자열 끝에 '\0'이 포함되지 않아 문자열의 길이를 동적으로 변경이 가능

▸ cin >> str

#include <iostream>
#include <string>

using namespace std;

int main()
{
	string str;
    
    cin >> str; // red apple 입력
    cout << "cin 결과: " << str << endl; // 출력 값 -> cin 결과: red
	
    return 0;
}

공백(space)이 입력될 때까지 값을 받음


▸ getline()

#include <iostream>
#include <string>

using namespace std;

int main()
{
	string str;
    
    getline(cin, str); // green kiwi
    cout << "getline() 결과: " << str << endl; // 출력 값 -> getline() 결과: green kiwi
    
    getline(cin, str, 'i');
    cout << "getline() 결과: " << str << endl; // 출력 값 -> getline() 결과: green k
    
	return 0;
}
  • cin.getline()
    <fstream> 헤더를 추가해서 사용 가능

  • getline(input, str, delim = "")
    - input : 문자열을 읽어들일 스트림
    - str : 입력된 문자열을 저장할 변수
    - delim : 구분문자, 해당 문자 전까지 읽어옴


3. 멤버 함수

▸ 특정 원소 접근

  • at(i)
    i 위치 문자 반환, 범위 유효성 체크 O

  • str[i]
    i 위치 문자 반환, 범위 유효성 체크 X

  • front()
    문자열의 가장 앞의 문자 반환

  • back()
    문자열의 가장 뒤의 문자 반환


▸ 문자열 크기

  • length()
    문자열 길이 반환

  • size()
    문자열 길이 반환 (length()와 동일)

  • max_size()
    최대한 메모리 할당할 경우 저장할 수 있는 문자열 길이 반환

  • capacity()
    문자열의 메모리 크기 반환

  • resize(n)
    크기를 n으로 변경 (삭제 or 빈 공간으로 채우는 식)

  • resize(n, 'a')
    n이 원래 길이보다 길면 빈 공간을 'a'로 채움

  • shrink_to_fit()
    capacity가 실제 사용하는 메모리보다 큰 경우 메모리를 줄여줌 (메모리 낭비 제거)

  • reserve(n)
    사이즈 n만큼의 메모리를 미리 할당

  • empty()
    빈 문자열인지 확인


▸ 문자열 삽입 / 추가 / 삭제

  • append(str2)
    문자열 뒤에 str2 문자열을 이어 붙여줌 (str + str2와 같은 결과)

  • append(str2, n, m)
    문자열 뒤에 str의 n번째 문자부터 m개의 문자를 이어 붙여줌

  • insert(n, str2)
    n번째 index 앞에 str2 문자열을 삽입함

  • replace(n, k, str2)
    n번째 index부터 k개의 문자열을 str2로 대체함

  • clear()
    저장된 문자열을 모두 지움

  • erase()
    clear()와 같음

  • erase(n, m)
    n번째 index부터 m개의 문자를 지움

  • erase(n, m) : iterator
    n ~ m index 문자열을 지움

  • push_back(c)
    문자열의 맨 뒤에 c를 붙여줌

  • pop_back()
    문자열의 맨 뒤의 문자를 제거

  • assign(str2)
    문자열에 str2 문자열을 할당함


▸ 부분 문자 / 비교 / 복사 / 찾기

  • substr()
    문자열 전체 반환

  • substr(n)
    문자열의 n번째 index부터 끝까지 부분 문자열 반환

  • substr(n, k)
    문자열의 n번째 index부터 k개의 부분 문자열 반환

  • compare(str2)
    str2와 같은지 비교,
    - str < str2 인 경우 음수 반환
    - str > str2 인 경우 양수 반환

  • copy(str2, k, n)
    문자열의 n번째 index부터 k개의 문자열을 복사

  • find("abcd")
    "abcd"가 문자열에 포함되어 있는지 확인
    찾으면 해당 부분 첫 index 반환

  • find("abcd", n)
    n번째 index부터 "abcd" 찾음
    없으면 string::npos 반환 (npos = no position)

  • find_first_of("/")
    "/"가 처음 나타나는 index 반환

  • find_last_of("/")
    "/"가 마지막으로 나타나는 index 반환


▸ 기타 유용한 함수들

  • c_str()
    string을 c스타일의 문자열로 변경

  • begin()
    string의 시작 iterator 반환

  • end()
    string의 끝 iterator 반환

  • swap(str, str2)
    str과 str2를 바꿔줌

  • str = str2 + str3
    str2와 str3를 붙여서 str에 복사함

  • str += str2
    str 뒤에 str2를 붙여줌

  • str = str2
    str에 str2 복사 (Deep copy)

  • str == str2
    같은지 비교

  • str > str2, str < str2
    str이 str2보다 사전순으로 앞인지 뒤인지 확인

  • <cctype> 헤더
    - isdigit(c)
    c가 숫자인지 확인,, 숫자이면 0이 아닌 숫자 반환
    - isalpha(c)
    알파벳 확인, 대문자는 1, 소문자는 2 반환, 알파벳이 아니면 0 반환
    - isupper(num)
    매개변수로 들어온 문자, 숫자가 대문자인지 확인하는 함수
    대문자가 아닌 경우 0, 맞을 경우 0이 아닌 숫자 반환
    - islower(num)
    isupper와 반대
    - toupper(c)
    c를 대문자로 변환
    - tolower(c)
    c를 소문자로 변환
    - stoi(), stof(), stol(), stod()
    문자열을 숫자로 변환 (순서대로 int, float, long, double)

0개의 댓글