IMCAT.DEV
로그인 가입
C++ 중급 자료구조

C++ 문자열 클래스 (std::string)

C++ 문자열 클래스 (std::string) — 중급

문자열 클래스 (std::string)

1. 도입 (왜 배워야 하는가)

C++에서 문자열은 매우 중요한 데이터 타입입니다. 우리는 다양한 데이터와 정보를 다루는 프로그램을 작성할 때 문자열을 사용합니다. 예를 들어, 사용자 입력, 파일 처리, 데이터베이스 쿼리 등에서 문자열은 필수적입니다. 만약 std::string을 제대로 이해하지 못한다면, 문자열 조작에서 생기는 복잡한 문제에 부딪히게 되고, 이는 프로그램의 오류나 비효율성을 초래할 수 있습니다. 또한, C 스타일 문자열(char 배열)과 비교했을 때, std::string은 메모리 관리와 문자열 조작을 훨씬 용이하게 만들어 줍니다.

2. 핵심 개념 설명

  • std::string: C++에서 제공하는 문자열을 다루기 위한 클래스입니다. 동적 메모리를 사용하여 문자열의 크기를 자동으로 관리합니다. 이는 마치 사용자가 필요에 따라 크기를 조절할 수 있는 유연한 물건과 같습니다.
  • C 스타일 문자열: Null 문자('\0')로 끝나는 char 배열입니다. C++에서도 사용되지만, 메모리 관리와 안전성에서 std::string보다 불편합니다.
  • 용어의미
    std::stringC++ 문자열 클래스, 동적 크기 조절 가능
    C 스타일 문자열Null 문자로 끝나는 char 배열

    3. 기본 코드 예제

    아래는 std::string의 기본적인 사용법을 보여주는 코드입니다.

    #include <iostream>
    #include <string>
    
    int main() {
        std::string greeting = "안녕하세요!"; // 문자열 생성
        std::cout << greeting << std::endl;   // 문자열 출력
    
        greeting += " 반갑습니다."; // 문자열 연결
        std::cout << greeting << std::endl; // 수정된 문자열 출력
    
        std::cout << "문자열 길이: " << greeting.length() << std::endl; // 문자열 길이 출력
    
        return 0;
    }

    실행 결과:

    안녕하세요!
    안녕하세요! 반갑습니다.
    문자열 길이: 15
  • std::string greeting = "안녕하세요!";: "안녕하세요!"라는 문자열을 생성하여 greeting 변수에 저장합니다.
  • std::cout << greeting << std::endl;: greeting의 내용을 출력합니다.
  • greeting += " 반갑습니다.";: 기존 문자열 뒤에 " 반갑습니다."를 추가하여 greeting을 수정합니다.
  • std::cout << greeting.length() << std::endl;: greeting의 길이를 출력합니다.
  • 4. 실전 활용 예제

    예제 1: 쇼핑몰 장바구니 구현

    장바구니에 상품 이름을 추가하고 총 상품 수를 출력하는 예제입니다.

    #include <iostream>
    #include <string>
    #include <vector>
    
    int main() {
        std::vector<std::string> cart; // 장바구니
        cart.push_back("사과"); // 장바구니에 사과 추가
        cart.push_back("바나나"); // 장바구니에 바나나 추가
    
        std::cout << "장바구니에 담긴 상품:" << std::endl;
        for (const auto& item : cart) {
            std::cout << item << std::endl; // 장바구니의 상품 출력
        }
        std::cout << "총 상품 수: " << cart.size() << std::endl; // 상품 수 출력
    
        return 0;
    }

    예제 2: 사용자 입력 처리

    사용자로부터 문자열을 입력받아 출력하는 예제입니다.

    #include <iostream>
    #include <string>
    
    int main() {
        std::string userInput; // 사용자 입력 저장 변수
        std::cout << "문자열을 입력하세요: ";
        std::getline(std::cin, userInput); // 사용자 입력 받기
    
        std::cout << "입력한 문자열: " << userInput << std::endl; // 입력한 문자열 출력
    
        return 0;
    }

    5. 흔한 실수와 주의사항

    1. C 스타일 문자열과 혼동

  • 잘못된 코드:
  • char str[] = "Hello";
    std::string s = str; // C 스타일 문자열을 std::string으로 변환
  • 올바른 코드:
  • const char* str = "Hello";
    std::string s = std::string(str); // 명시적으로 변환
  • 주의: C 스타일 문자열을 std::string으로 직접 할당할 경우, 문제가 발생할 수 있습니다.
  • 2. 문자열 길이 계산 시 주의

  • 잘못된 코드:
  • std::string str = "Hello";
    if (str.length() = 5) { // '=' 연산자 사용
        std::cout << "길이가 5입니다." << std::endl;
    }
  • 올바른 코드:
  • if (str.length()  5) { // '' 연산자 사용
        std::cout << "길이가 5입니다." << std::endl;
    }
  • 주의: 잘못된 비교 연산자 사용으로 인해 컴파일 오류가 발생할 수 있습니다.
  • 6. 정리

  • std::string은 문자열을 다루기 위한 유용한 클래스입니다.
  • C 스타일 문자열보다 메모리 관리와 사용이 훨씬 간편합니다.
  • 문자열의 길이, 연결, 입력 처리 등 다양한 기능을 제공합니다.
  • 다음에 학습하면 좋은 주제: 문자열 검색 및 대체, std::string의 다양한 메서드 및 활용 패턴.