Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ 문자열(String) 클래스 완벽 가이드: 생성자, 연산자, 주요 함수 활용법

C++에는 String 클래스가 내장되어 있으며, 이는 전통적인 C 스타일 문자열과는 확연히 다릅니다. C 언어에서 문자열은 사실상 char 배열에 불과하지만, C++의 string 클래스는 다양한 멤버 함수와 연산자를 제공하여 훨씬 안전하고 편리하게 문자열을 다룰 수 있습니다.

이 글에서는 C++ string 클래스의 핵심 기능을 세 가지 측면에서 살펴보겠습니다. 바로 생성자, 연산자, 그리고 주요 멤버 함수입니다.

1. 다양한 생성자 활용하기

string 클래스는 여러 형태의 생성자를 제공합니다. 문자열 리터럴로 초기화하거나, 다른 string 객체를 복사하거나, 특정 문자를 반복해서 채우는 등 다양한 방식으로 객체를 생성할 수 있습니다. 아래 예제를 통해 각 생성자의 동작 방식을 확인해 보세요.

예제 코드

#include<iostream>
using namespace std;
int main() {
    string str("This is a string");
    cout << "String is: " << str << endl;
    string str2(str); // 다른 string 객체로 초기화
    cout << "String is: " << str2 << endl;
    string str3(5, 'A'); // 문자를 반복하여 초기화
    cout << "String is: "<< str3 << endl;
    string str4(str, 5, 10); // 다른 string의 인덱스 5부터 10개 문자로 초기화
    cout << "String is: " << str4 << endl;
    string str5(str.begin(), str.begin() + 7); // 반복자 범위로 초기화
    cout << "String is: " << str5 << endl;
}

실행 결과

String is: This is a string
String is: This is a string
String is: AAAAA
String is: is a strin
String is: This is

2. 기본 연산자 사용하기

string 클래스는 직관적인 연산자 오버로딩을 지원합니다. 대표적으로 다음 세 가지 연산자가 자주 사용됩니다.

  • 대입 연산자(=): 한 string 객체를 다른 객체에 복사합니다.
  • 연결 연산자(+): 두 문자열을 손쉽게 이어 붙일 수 있습니다.
  • 인덱스 연산자([ ]): 배열처럼 특정 위치의 문자에 접근할 수 있습니다.

예제 코드

#include<iostream>
using namespace std;
int main() {
    string str = "Hello ";
    string str2 = "World";
    string str3, str4;
    str3 = str; // 대입 연산자 사용
    cout << "str3의 값: " << str3 << endl;
    str4 = str + str2; // 두 문자열 연결
    cout << "str4의 값: " << str4 << endl;
    cout << "str의 1번 위치 문자: " << str[1] << endl;
}

실행 결과

str3의 값: Hello
str4의 값: Hello World
str의 1번 위치 문자: e

3. 주요 멤버 함수 정리

string 클래스는 문자열 조작에 필요한 강력한 멤버 함수들을 제공합니다. 아래 예제에서는 clear(), length(), at(), append(), find(), substr(), erase(), replace() 등 실무에서 자주 쓰이는 함수들의 사용법을 확인할 수 있습니다.

예제 코드

#include<iostream>
using namespace std;
int main() {
    string str = "Hello";
    cout << "clear 호출 전: " << str << endl;
    str.clear(); // 문자열 비우기
    cout << "clear 호출 후: " << str << endl;
    str = "This is a string:";
    cout << "length()와 size()로 구한 길이: " <<str.length() << " / " << str.size() << endl;
    cout << "1번 위치의 문자(at): " << str.at(1) << endl;
    cout << "첫 번째 문자(front): " << str.front() << endl;
    cout << "마지막 문자(back): " << str.back() << endl;
    cout << "C 스타일 문자 배열 변환(c_str): " << str.c_str() << endl;
    cout << "문자열 추가 후: " << str.append("ABCDEF") << endl;
    string str2 = "ANOTHER STRING";
    cout << "str2의 일부 추가 후: " << str.append(str2,0, 5) << endl;
    // find 함수로 부분 문자열 검색
    if (str.find("is") != string::npos)
        cout << "\"is\"는 str의 " << str.find("is") << "번째 위치에서 발견됨" <<endl;
    else
        cout << "부분 문자열을 찾지 못했습니다" << endl;
    cout << "인덱스 5부터 길이 3인 부분 문자열: " <<str.substr(5, 3) <<endl;
    cout << "인덱스 5부터 4개 문자 삭제 후: " <<str.erase(5, 4) << endl;
    cout << "인덱스 3부터 7개 문자 교체 후: " <<str.replace(3, 7, "C++Programming");
}

실행 결과

clear 호출 전: Hello
clear 호출 후:
length()와 size()로 구한 길이: 17 / 17
1번 위치의 문자(at): h
첫 번째 문자(front): T
마지막 문자(back):
C 스타일 문자 배열 변환(c_str): This is a string:
문자열 추가 후: This is a string:ABCDEF
str2의 일부 추가 후: This is a string:ABCDEFANOTH
"is"는 str의 2번째 위치에서 발견됨
인덱스 5부터 길이 3인 부분 문자열: is
인덱스 5부터 4개 문자 삭제 후: This
string:ABCDEFANOTH
인덱스 3부터 7개 문자 교체 후: ThiC++ Programmingng:ABCDEFANOTH

마무리

C++의 string 클래스는 C 스타일 문자열이 가진 메모리 관리의 번거로움과 버퍼 오버플로 위험을 해소해 줍니다. 다양한 생성자, 직관적인 연산자, 풍부한 멤버 함수를 활용하면 문자열 처리 코드를 훨씬 간결하고 안전하게 작성할 수 있습니다. 실제 프로젝트에서 위 예제들을 직접 실행해 보며 각 함수의 동작을 익혀두는 것을 추천합니다.