2.1 String

SeungHee Yun·2023년 9월 21일
0

전문가를 위한 C++

목록 보기
13/15

개요

C에서는 char* 또는 char[]의 형태로 문자열을 다뤘다면,
C++에서는 문자열을 하나의 변수 Type 처럼 사용합니다.
문자열을 변수 type으로 사용하면,
문자열을 훨씬 다양하고 쉽게 다룰 수 있게 해주는데요,

char*, char[]과 다르게
문자열 끝에 \0 문자가 들어가지 않으며, 문자열의 길이를 동적으로 변경 가능합니다.

string 은 C++ STL에서 제공하는 클래스로, 말 그대로 문자열을 다루는 클래스입니다.


String 클래스의 입/출력

C++의 입출력 방식인 cin, cout으로 입출력이 가능하며,
getline 함수도 사용할 수 있습니다.

    string str;             // 문자열 생성
    cin >> str;             // 공백(space) 이전까지의 문자열을 입력 받는다.
    getline(cin, str);      // `\n` 이전까지의 문자열, 즉 한 줄을 통째로 입력 받는다.(공백 포함)
    getline(cin, str, 'a'); // 'a' 문자 이전까지의 문자열을 입력 받는다.
    cout << str;            // 문자열을 출력한다.

string 클래스의 생성

string의 사용을 위해서는 먼저 <string> 헤더 파일을 추가해 주어야합니다.

#include <string>

int main()
{
    string str;                             // 빈 문자열 str 생성

    string str = "abcdef";
    string str;                             // "abcdef"로 선언된 str 생성
    str = "abcdef";          

    string str("abcdef");                   // "abcdef"로 선언된 str 생성

    string str2(str1);                      // str1 문자열을 복사한 str2 생성

    char s[] = {'a', 'b', 'c', 'd', 'e', 'f'};
    string str(s);                          // C에서의 문자열과 호환 가능

    string* str = new string("abcdef");     // new를 이용한 동적 할당


    return 0;
}

string 클래스 연산자 활용

**string 클래스에 <, >, ==, + 등과 같은 연산자들을 사용할 수 있습니다.

  • 문자열 비교 (<, >, ==): 두 문자열의 사전 순서를 비교, 또는 동일여부 판단.
  • 문자열 연결 (+): 두 문자열을 이어줍니다.

string 클래스의 멤버 함수

string 클래스에는 유용한 멤버 함수들이 정말 많습니다.

string st;로 선언되었다고 가정하고 멤버 함수들을 살펴보겠습니다.

string의 특정 원소 접근

str.at(index);
index 위치의 문자 반환. 유효한 범위인지 체크 O

str[index];
index 위치의 문자 반환. 유효 범위 체크 X, 따라서 at보다 접근 빠름

str.front();
문자열의 가장 앞 문자 반환

str.back();
문자열의 가장 뒷 문자 반환

string의 크기

str.length();
문자열 길이 반환

str.size();
문자열 길이 반환 (length와 동일)

str.capacity();
문자열이 사용중인 메모리 크기 반환

str.resize(n);
str을 n의 크기로 만든다.
기존보다 n이 작다면 남은 부분 삭제, 크다면 빈 공간으로 채움

str.resize(n, 'a');
n이 str의 길이보다 크다면, 빈 공간을 'a'로 채움

str.shrink_to_fit();
str의 capacity가 실제 사용하는 메모리보다 큰 경우, 메모리를 줄여줌

str.reserve(n);
size = n 만큼의 메모리를 미리 할당 함

str.empty();
str이 빈 문자열인지 확인

string에 삽입, 추가, 삭제

str.append(str2);
str뒤에 str2 문자열을 붙임

str.append(str2, n, m);
str뒤에 str2의 n번째 index부터 m개의 문자를 이어 붙임

str.append(n, 'a');
str 뒤에 n개의 'a'를 이어 붙임

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

str.replace(n, k, str2);
n번째 index부터 k개의 문자를 str2로 대체함

str.clear();
저장된 문자열을 모두 지움

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

str.erase(n, m); - iterator
n~m index의 문자열을 지움 (n과m은 iterator)

str.erase();
clear와 같은 동작

str.push_back(c);
str의 맨 뒤에 c문자를 붙여줌

str.pop_back();
str의 맨 뒤 문자를 제거

str.assign(str2);
str에 str2 문자열을 할당 (변수 정의와 동일)

기타 유용한 string 멤버 함수

str.find("abcd");
"abcd"가 str에 포함된지를 확인, 찾으면 해당 부분 첫번째 index 반환

str.find("abcd", n);
n번째 index부터 "abcd"를 find

str.substr();
str 전체를 반환

str.substr(n);
str의 n번째 index부터 끝까지의 문자를 부분문자열로 반환

str.substr(n, k);
str의 n번째 index부터 k개의 문자를 부분문자열로 반환

str.compare(str2);
str과 str2가 같은지 비교. 같다면 0, str<str2인경우 음수, 반대면 양수 반환

swap(str1, str2);
str1과 str2를 바꿔줌. reference 교환 방식

isdigit(c);
c문자가 숫자면 true, 아니면 false 반환

isalpha(c);
c 문자가 영어면 true, 아니면 false를 반환

toupper(c);
c 문자를 대문자로 변환

tolower(c);
c 문자를 소문자로 변환


참조 : Rebro의 코딩 일기장


profile
Enthusiastic Game Developer

0개의 댓글