C++ 문자열: 초보자를 위한 친절한 가이드

안녕하세요, 미래의 코딩 슈퍼스타! 컴퓨터 과학 교사로서 오랜 경험을 가진 저는 C++ 문자열의 fascinling 세계를 여러분과 함께 탐험하게 되어 기쁩니다. 코드를 한 줄도 작성한 적이 없다면 걱정하지 마세요 - 우리는 가장 기초적인 부분부터 시작하여 함께 올라갈 것입니다. 이 튜토리얼의 끝을 맺을 때, 여러분은 최고의 사람들과 함께 문자열을 다루게 될 것입니다! (죄송합니다, 작은 문자열 유머로 시작할 수밖에 없었어요!)

C++ Strings

C 스타일 문자열

C++의 모든 문자열의 원조격인 C 스타일 문자열로 시작해 보겠습니다. 이 문자열은 C 프로그래밍 언어에서 비롯되었지만, C++에서 이해하는 것은 여전히 중요합니다.

C 스타일 문자열이란?

C 스타일 문자열은 실제로는 null 터미네이터(\0)로 끝나는 문자 배열입니다. 이 null 터미네이터는 컴퓨터가 문자열이 어디서 끝나는지 알려줍니다.

다음은 간단한 예제입니다:

char greeting[] = "Hello";

이 경우 greeting은 실제로 6개의 문자 배열입니다: {'H', 'e', 'l', 'l', 'o', '\0'}.

C 스타일 문자열 다루기

C 스타일 문자열의 일반적인 연산을 살펴보겠습니다:

  1. 선언 및 초기화:
char name[20] = "Alice";  // 최대 19자리 문자열(plus null 터미네이터 포함) 선언
char city[] = "New York"; // 크기는 자동으로 결정됨
  1. 입력 및 출력:
#include <iostream>
#include <cstring>

int main() {
char food[50];
std::cout << "좋아하는 음식은 무엇인가요? ";
std::cin.getline(food, 50);
std::cout << "아, " << food << "은(는) 맛있어 보이네요!" << std::endl;
return 0;
}

이 예제에서는 cin.getline()을 사용하여 공백을 포함한 전체 줄을 입력으로 받습니다.

  1. 문자열 조작:

C 스타일 문자열은 <cstring> 라이브러리의 함수를 사용하여 조작할 수 있습니다. 다음은 몇 가지 일반적인 함수입니다:

함수 설명 예제
strlen() 문자열 길이 가져오기 int len = strlen(name);
strcpy() 문자열 복사 strcpy(dest, src);
strcat() 문자열 연결 strcat(str1, str2);
strcmp() 문자열 비교 int result = strcmp(str1, str2);

다음은 이 함수들을 사용하는 간단한 프로그램입니다:

#include <iostream>
#include <cstring>

int main() {
char first_name[20] = "John";
char last_name[20] = "Doe";
char full_name[40];

std::cout << "이름의 길이: " << strlen(first_name) << std::endl;

strcpy(full_name, first_name);
strcat(full_name, " ");
strcat(full_name, last_name);

std::cout << "전체 이름: " << full_name << std::endl;

if (strcmp(first_name, last_name) == 0) {
std::cout << "이름과 성이 같습니다!" << std::endl;
} else {
std::cout << "이름과 성이 다릅니다." << std::endl;
}

return 0;
}

이 프로그램은 문자열 길이 계산, 복사, 연결, 비교를 보여줍니다. 꽤 쉬우right?

C++의 String 클래스

이제 C++에서 문자열을 더 현대적이고 편리하게 다루는 방법으로 넘어가 보겠습니다: std::string 클래스.

std::string 소개

std::string 클래스는 C++ 표준 라이브러리의 일부로, 문자열을 훨씬 더 친절하게 다루는 방법을 제공합니다. 이 클래스는 메모리 관리를 자동으로 처리하고 유용한 회원 함수들을 많이 제공합니다.

std::string을 사용하려면 <string> 헤더를 포함해야 합니다:

#include <string>

std::string 객체 생성 및 사용

다음은 몇 가지 예제를 보여드리겠습니다:

  1. 선언 및 초기화:
std::string greeting = "Hello, world!";
std::string name("Alice");
std::string empty_string;  // 빈 문자열 생성
  1. 입력 및 출력:
#include <iostream>
#include <string>

int main() {
std::string favorite_color;
std::cout << "좋아하는 색은 무엇인가요? ";
std::getline(std::cin, favorite_color);
std::cout << "아, " << favorite_color << "은(는) 아름다운 색이에요!" << std::endl;
return 0;
}

이 예제에서는 std::getline()을 사용하여 공백을 포함한 전체 줄을 입력으로 받습니다.

  1. 문자열 연산:

std::string 클래스는 많은 유용한 회원 함수를 제공합니다. 다음은 몇 가지 일반적인 함수입니다:

함수 설명 예제
length() or size() 문자열 길이 가져오기 int len = str.length();
empty() 문자열이 빈지 확인 if (str.empty()) { ... }
append() or += 문자열에 추가 str.append(" World"); or str += " World";
substr() 부분 문자열 가져오기 std::string sub = str.substr(0, 5);
find() 문자열 찾기 size_t pos = str.find("hello");
replace() 문자열 일부 교체 str.replace(0, 5, "Hi");

다음은 이 함수들을 사용하는 간단한 프로그램입니다:

#include <iostream>
#include <string>

int main() {
std::string sentence = "빠른 갈색 고양이가 게으른 개를 뛰어넘는다";

std::cout << "문장의 길이: " << sentence.length() << std::endl;

if (!sentence.empty()) {
std::cout << "문장이 비어 있지 않습니다." << std::endl;
}

sentence += "!";  // 느낌표 추가
std::cout << "업데이트된 문장: " << sentence << std::endl;

std::string sub = sentence.substr(4, 5);  // "빠른" 가져오기
std::cout << "부분 문장: " << sub << std::endl;

size_t fox_pos = sentence.find("고양이");
if (fox_pos != std::string::npos) {
std::cout << "'고양이'를 찾았습니다: " << fox_pos << std::endl;
}

sentence.replace(fox_pos, 3, "개");
std::cout << "교체 후: " << sentence << std::endl;

return 0;
}

이 프로그램은 문자열 길이 계산, 빈 문자열 확인, 추가, 부분 문자열 추출, 찾기, 교체를 보여줍니다.

C 스타일 문자열과 std::string 비교

C 스타일 문자열은 여전히 일부 문맥에서 사용됩니다(특히 C 코드와의 상호작용에서), 하지만 std::string은 일반적으로 현대적인 C++에서 선호됩니다. 몇 가지 이유는 다음과 같습니다:

  1. 자동 메모리 관리
  2. 더 안전하고 사용하기 쉬움
  3. 더 편리한 연산(예: + 연산자로 연결)
  4. 풍부한 회원 함수

다음은 간단한 비교입니다:

// C 스타일 문자열
char cstr1[20] = "Hello";
char cstr2[20];
strcpy(cstr2, cstr1);  // 복사
strcat(cstr1, " World");  // 연결

// std::string
std::string str1 = "Hello";
std::string str2 = str1;  // 복사
str1 += " World";  // 연결

이와 같이 std::string 연산은 더 직관적이고 오류가 적습니다.

결론

축하합니다! C++ 문자열의 세계로 첫 걸음을 내디디셨습니다. 우리는 C 스타일 문자열과 더 현대적인 std::string 클래스를 다루었습니다.

기억해 두세요, 연습이 완성입니다. 두 종류의 문자열을 사용하여 프로그램을 작성해 보세요. 연습을 계속하면 곧 문자열을 마스터하게 될 것입니다!

계속 코딩하고, 배우고, 가장 중요한 것은 즐겁게 코딩하세요! 어쩌면 언젠가 자신만의 문자열 라이브러리를 작성하게 될지도 모릅니다. 그 때까지, 행복한 코딩을 기원합니다!

Credits: Image by storyset