C++ 초급 - 6. 배열과 문자열 (5 - std::string (C++ 표준 문자열))

2025. 2. 22. 13:47프로그래밍 언어/C++

📌 6.5 std::string (C++ 표준 문자열)

C++의 std::string 클래스C-스타일 문자열(char[])의 단점을 개선한 문자열 처리 클래스이다.
C++ 표준 라이브러리 <string> 헤더를 포함하면 사용할 수 있으며,
자동 메모리 관리, 편리한 문자열 조작 기능 제공, 안전한 크기 조절 등의 장점이 있다.

std::string은 C++에서 기본적인 문자열 처리를 할 때 권장되는 방식이며,
문자열 비교, 연결, 검색, 부분 문자열 추출 등의 다양한 기능을 제공한다.


📌 1. std::string 선언 및 초기화

🔹 (1) std::string 선언 방식

💡 기본 문법

#include <string>
std::string 문자열이름 = "문자열";

💡 예제: std::string 선언 및 초기화

#include <iostream>
#include <string>

int main() {
    std::string str1 = "Hello";  // 직접 초기화
    std::string str2("World");   // 생성자 방식 초기화
    std::string str3;  // 빈 문자열 선언

    std::cout << "str1: " << str1 << std::endl;
    std::cout << "str2: " << str2 << std::endl;
    std::cout << "str3(초기값 없음): " << str3 << std::endl;

    return 0;
}

🔹 출력 결과

str1: Hello
str2: World
str3(초기값 없음):

💡 설명

  • std::string str1 = "Hello"; → 문자열을 직접 초기화.
  • std::string str2("World"); → 생성자 방식으로 초기화.
  • std::string str3; → 빈 문자열 선언.

📌 2. 문자열 입력 (std::getline)

std::cin을 사용하면 공백 이전까지만 입력되므로,
공백을 포함하는 문자열을 입력받을 때 std::getline()을 사용한다.

💡 예제: std::getline()을 이용한 문자열 입력

#include <iostream>
#include <string>

int main() {
    std::string name;

    std::cout << "이름을 입력하세요: ";
    std::getline(std::cin, name);  // 공백 포함 입력 가능

    std::cout << "입력한 이름: " << name << std::endl;
    return 0;
}

🔹 입력 예시

이름을 입력하세요: Alice Wonderland
입력한 이름: Alice Wonderland

💡 설명

  • std::getline(std::cin, name); → 공백 포함 문자열 입력 가능.

주의:

  • std::cin 입력 후 std::getline()을 사용할 때 입력 버퍼 문제를 방지하려면 std::cin.ignore()를 추가해야 한다.

📌 3. 문자열 길이 (length())

문자열 길이는 length() 또는 size() 메서드를 사용하여 확인 가능하다.

💡 예제: length() 사용

#include <iostream>
#include <string>

int main() {
    std::string text = "Hello, C++!";
    
    std::cout << "문자열 길이: " << text.length() << std::endl;
    std::cout << "문자열 크기: " << text.size() << std::endl;

    return 0;
}

🔹 출력 결과

문자열 길이: 11
문자열 크기: 11

💡 설명

  • length()와 size()는 동일한 기능을 수행한다.

📌 4. 문자열 추가 (append(), +=)

🔹 (1) append(): 문자열을 추가

💡 예제: append() 사용

#include <iostream>
#include <string>

int main() {
    std::string str = "Hello";
    str.append(", World!");

    std::cout << "추가된 문자열: " << str << std::endl;
    return 0;
}

🔹 출력 결과

추가된 문자열: Hello, World!

🔹 (2) += 연산자 사용

💡 예제: += 연산자로 문자열 추가

#include <iostream>
#include <string>

int main() {
    std::string str = "C++";
    str += " Programming";

    std::cout << "결과 문자열: " << str << std::endl;
    return 0;
}

🔹 출력 결과

결과 문자열: C++ Programming

💡 설명

  • append()와 +=는 동일한 기능을 하지만, +=가 더 간결한 코드 작성에 유용.

📌 5. 문자열 비교 (==, !=, compare())

🔹 (1) == 연산자를 사용한 비교

💡 예제: ==, != 연산자 사용

#include <iostream>
#include <string>

int main() {
    std::string str1 = "apple";
    std::string str2 = "banana";

    if (str1 == str2) {
        std::cout << "두 문자열이 같습니다." << std::endl;
    } else {
        std::cout << "두 문자열이 다릅니다." << std::endl;
    }

    return 0;
}

🔹 출력 결과

두 문자열이 다릅니다.

🔹 (2) compare() 함수 사용

💡 예제: compare()를 사용한 비교

#include <iostream>
#include <string>

int main() {
    std::string str1 = "apple";
    std::string str2 = "banana";

    if (str1.compare(str2) == 0) {
        std::cout << "두 문자열이 같습니다." << std::endl;
    } else {
        std::cout << "두 문자열이 다릅니다." << std::endl;
    }

    return 0;
}

🔹 출력 결과

두 문자열이 다릅니다.

💡 설명

  • compare()는 동일하면 0, 사전 순으로 작으면 -1, 크면 1 반환.

📌 6. 부분 문자열 (substr()) 및 검색 (find())

🔹 (1) substr(): 부분 문자열 추출

💡 예제: substr() 사용

#include <iostream>
#include <string>

int main() {
    std::string text = "Hello, World!";
    std::string sub = text.substr(7, 5);  // 7번째 위치부터 5글자 추출

    std::cout << "부분 문자열: " << sub << std::endl;
    return 0;
}

🔹 출력 결과

부분 문자열: World

🔹 (2) find(): 특정 문자열 검색

💡 예제: find() 사용

#include <iostream>
#include <string>

int main() {
    std::string text = "C++ programming";
    size_t pos = text.find("program");

    if (pos != std::string::npos) {
        std::cout << "'program'은 " << pos << "번째 위치에서 발견되었습니다." << std::endl;
    }

    return 0;
}

🔹 출력 결과

'program'은 4번째 위치에서 발견되었습니다.

📌 7. 정리

개념 설명
문자열 선언 std::string str = "Hello";
문자열 입력 std::getline(std::cin, str);
문자열 길이 str.length();
문자열 추가 str.append(" World!"); 또는 str += " World!";
문자열 비교 ==, !=, compare()
부분 문자열 추출 substr(시작, 길이);
문자열 검색 find("문자열");