C++ 문자열: 초보자를 위한 친절한 가이드
안녕하세요, 미래의 코딩 슈퍼스타! 컴퓨터 과학 교사로서 오랜 경험을 가진 저는 C++ 문자열의 fascinling 세계를 여러분과 함께 탐험하게 되어 기쁩니다. 코드를 한 줄도 작성한 적이 없다면 걱정하지 마세요 - 우리는 가장 기초적인 부분부터 시작하여 함께 올라갈 것입니다. 이 튜토리얼의 끝을 맺을 때, 여러분은 최고의 사람들과 함께 문자열을 다루게 될 것입니다! (죄송합니다, 작은 문자열 유머로 시작할 수밖에 없었어요!)
C 스타일 문자열
C++의 모든 문자열의 원조격인 C 스타일 문자열로 시작해 보겠습니다. 이 문자열은 C 프로그래밍 언어에서 비롯되었지만, C++에서 이해하는 것은 여전히 중요합니다.
C 스타일 문자열이란?
C 스타일 문자열은 실제로는 null 터미네이터(\0
)로 끝나는 문자 배열입니다. 이 null 터미네이터는 컴퓨터가 문자열이 어디서 끝나는지 알려줍니다.
다음은 간단한 예제입니다:
char greeting[] = "Hello";
이 경우 greeting
은 실제로 6개의 문자 배열입니다: {'H', 'e', 'l', 'l', 'o', '\0'}
.
C 스타일 문자열 다루기
C 스타일 문자열의 일반적인 연산을 살펴보겠습니다:
- 선언 및 초기화:
char name[20] = "Alice"; // 최대 19자리 문자열(plus null 터미네이터 포함) 선언
char city[] = "New York"; // 크기는 자동으로 결정됨
- 입력 및 출력:
#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()
을 사용하여 공백을 포함한 전체 줄을 입력으로 받습니다.
- 문자열 조작:
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 객체 생성 및 사용
다음은 몇 가지 예제를 보여드리겠습니다:
- 선언 및 초기화:
std::string greeting = "Hello, world!";
std::string name("Alice");
std::string empty_string; // 빈 문자열 생성
- 입력 및 출력:
#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()
을 사용하여 공백을 포함한 전체 줄을 입력으로 받습니다.
- 문자열 연산:
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++에서 선호됩니다. 몇 가지 이유는 다음과 같습니다:
- 자동 메모리 관리
- 더 안전하고 사용하기 쉬움
- 더 편리한 연산(예:
+
연산자로 연결) - 풍부한 회원 함수
다음은 간단한 비교입니다:
// 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