1. C 스타일 문자열의 한계점

C 스타일 문자열(char[], const char*)은 다음과 같은 한계가 있습니다:

  1. 문자열 비교

    char name[] = "Rookiss";
    char name2[] = "Rookiss";
    if (name == name2) {
        cout << "같음" << endl;
    } else {
        cout << "다름" << endl;
    }
    • 문제점: namename2는 문자열 내용을 비교하는 것이 아니라 주소값을 비교합니다.
    • 해결 방법: 문자열 내용을 비교하려면 strcmp 함수를 사용해야 합니다.
      if (strcmp(name, name2) == 0) {
          cout << "같음" << endl;
      }
  2. 불편한 문자열 조작

    • 문자열을 복사하거나 수정하려면 strcpy, strcat, strlen 등의 함수를 사용해야 합니다.
      char str1[50] = "Hello";
      char str2[50] = "World";
      strcat(str1, str2); // str1에 str2를 연결
      cout << str1 << endl;
  3. 메모리 관리

    • C 스타일 문자열은 고정 길이 배열이므로 동적 길이 조정이 어렵습니다.
    • 문자열의 길이가 부족하면 버퍼 오버플로우 위험이 발생합니다.

2. C++ std::string 클래스

std::string은 C++ 표준 라이브러리에서 제공하는 문자열 클래스입니다. C 스타일 문자열의 한계를 해결하며 사용하기 쉽고 효율적입니다.


a. std::string의 특징

  1. 가변 길이 문자열

    • 문자열의 길이가 동적으로 조정됩니다. 사용자가 길이를 직접 관리할 필요가 없습니다.
  2. 문자열 조작

    • 문자열의 결합, 분할, 삽입, 제거, 수정 등 다양한 기능을 제공합니다.
  3. 편리한 접근

    • 배열 인덱스를 통해 문자에 접근할 수 있습니다.
      std::string str = "Hello";
      cout << str[0] << endl; // 'H'
  4. 안전한 비교

    • == 연산자가 오버로딩되어 문자열 내용을 비교합니다.
      std::string str1 = "Rookiss";
      std::string str2 = "Rookiss";
      if (str1 == str2) {
          cout << "같음" << endl;
      }
  5. null 종료 문자열 아님

    • std::string은 null 종료 문자열이 아니므로 중간에 '\0' 문자가 포함될 수 있습니다.
  6. 표준 입출력 지원

    • std::cinstd::cout을 통해 간단히 입출력할 수 있습니다.

b. std::string 사용 예제

1. 문자열 생성 및 초기화

std::string str1 = "Hello, World!";
std::string str2("Hello, World!");
std::string str3(str1); // 복사 생성자 사용

2. 문자열 비교

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

3. 문자열 결합

std::string str1 = "Hello";
std::string str2 = "World";
std::string combined = str1 + ", " + str2 + "!"; // 문자열 연결
cout << combined << endl;

4. 문자열 길이 확인

std::string str = "Hello";
cout << "Length: " << str.length() << endl;

5. 부분 문자열 추출

std::string str = "Hello, World!";
std::string sub = str.substr(0, 5); // "Hello"
cout << sub << endl;

6. 문자열 찾기

std::string str = "Hello, World!";
auto pos = str.find("World");
if (pos != std::string::npos) {
    cout << "Found at position: " << pos << endl;
} else {
    cout << "Not found" << endl;
}

7. 문자열 교체

std::string str = "Hello, World!";
str.replace(str.find("World"), 5, "C++"); // "C++"로 교체
cout << str << endl;

8. 문자열 추가

std::string str = "Hello";
str.append(", World!");
cout << str << endl; // "Hello, World!"

9. C 스타일 문자열로 변환

std::string str = "Hello";
const char* cstr = str.c_str(); // C 스타일 문자열로 변환
printf("%s\n", cstr);

3. 문자열 입력과 출력

문자열 입력

  • std::cin은 공백 이전까지만 입력받습니다.
  • std::getline은 한 줄 전체를 입력받습니다.
std::string name;
cout << "Enter your name: ";
getline(cin, name); // 공백 포함 입력받기
cout << "Hello, " << name << "!" << endl;

4. std::string 메서드 정리

메서드설명
length()문자열의 길이를 반환합니다.
append()문자열의 끝에 다른 문자열을 추가합니다.
substr(pos, len)부분 문자열을 반환합니다.
find()특정 문자열을 찾아 위치를 반환합니다.
replace(pos, len)특정 부분을 다른 문자열로 교체합니다.
c_str()C 스타일 문자열로 반환합니다.
compare()문자열을 비교합니다.
+, +=문자열 결합 연산자.

profile
李家네_공부방

0개의 댓글