C++에서 문자열을 다루는 방법은?
A1: C++에서는 문자열을 다루기 위해 크게 두 가지 방법을 사용합니다. 하나는 C 스타일 문자열(char 배열), 다른 하나는 C++ 표준 라이브러리의 std::string 클래스를 사용하는 방법입니다. std::string은 더 안전하고 편리하게 문자열을 처리할 수 있습니다.
Q2: C 스타일 문자열이란 무엇인가요?
A2: C 스타일 문자열은 null 문자('\0')로 끝나는 문자(char) 배열입니다. 예를 들어, `char str[] = "hello";` 와 같이 선언하며, 문자열의 끝을 알기 위해 null 문자가 반드시 포함되어야 합니다.
Q3: std::string이란 무엇이고 왜 사용하는 것이 좋은가요?
A3: std::string은 C++ 표준 라이브러리에서 제공하는 문자열 클래스입니다. 메모리 관리를 자동으로 해주고 다양한 편리한 함수(member function)를 제공하여 문자열 연결, 검색, 비교, 수정 등을 안전하고 쉽게 할 수 있게 해줍니다. C 스타일 문자열보다 버그가 적고 코드가 간결해집니다.
Q4: std::string 변수 선언 및 초기화 방법은?
A4: 선언과 초기화 예시는 다음과 같습니다.
```cpp
std::string s1; // 빈 문자열
std::string s2 = "Hello"; // 문자열 리터럴로 초기화
std::string s3("World"); // 생성자 방식 초기화
```
Q5: 문자열 연결은 어떻게 하나요?
A5: std::string끼리는 `+` 연산자로 연결할 수 있습니다. 예:
```cpp
std::string s = "Hello, " + std::string("World!");
```
또는 `+=` 연산자를 사용해 기존 문자열에 추가할 수도 있습니다.
Q6: C 스타일 문자열과 std::string 간 변환은 어떻게 하나요?
A6:
- std::string → C 스타일 문자열 : `c_str()` 멤버 함수를 사용합니다.
```cpp
std::string s = "hello";
const char* cstr = s.c_str();
```
- C 스타일 문자열 → std::string : 직접 초기화 가능
```cpp
const char* cstr = "hello";
std::string s = cstr;
```
Q7: std::string에서 특정 문자 또는 부분 문자열 검색은?
A7: `find()` 함수를 사용합니다.
```cpp
std::string s = "hello world";
size_t pos = s.find("world");
if (pos != std::string::npos) {
// 찾음
}
```
Q8: 문자열 길이를 구하는 방법은?
A8: `length()` 또는 `size()` 멤버 함수를 사용합니다.
```cpp
std::string s = "hello";
size_t len = s.length(); // 5
```
Q9: 문자열 일부를 추출하는 방법은?
A9: `substr()` 함수를 사용합니다.
```cpp
std::string s = "hello world";
std::string sub = s.substr(6, 5); // "world"
```
Q10: 문자열 비교는 어떻게 하나요?
A10: `==`, `!=` 연산자를 직접 사용하거나, `compare()` 함수를 사용할 수 있습니다.
```cpp
if (s1 == s2) { ... }
int res = s1.compare(s2);
```
Q11: 문자열 내 문자 접근은 어떻게 하나요?
A11: 인덱스 연산자 `[]` 또는 `at()` 함수를 사용합니다.
```cpp
char c = s[0]; // 또는 s.at(0)
```
`at()`은 범위 체크를 하여 예외를 던집니다.
Q12: 문자열 수정은 어떻게 할 수 있나요?
A12: `[]` 연산자 또는 `at()`으로 특정 문자 변경 가능하며, `append()`, `insert()`, `erase()` 등의 함수도 사용할 수 있습니다.
```cpp
s[0] = 'H';
s.append("!!!");
```
Q13: C 스타일 문자열을 안전하게 다루려면 어떻게 해야 하나요?
A13: 버퍼 크기를 항상 확보하고 `strncpy`, `snprintf` 등 안전한 함수를 사용하며, 가능한 std::string 사용을 권장합니다.
Q14: 문자열을 숫자로 변환하려면?
A14: `
```cpp
int num = std::stoi("12345");
```
Q15: 문자열 포맷팅은 어떻게 하나요?
A15: C++20 이전까지는 `sprintf` 또는 `stringstream`을 사용하며, C++20부터는 `std::format`을 사용할 수 있습니다.
```cpp
include
std::stringstream ss;
ss << "Number: " << 10;
std::string s = ss.str();
```
Q16: 멀티바이트/유니코드 문자열 처리 방법은?
A16: `std::wstring`을 사용하거나 Boost, ICU 같은 라이브러리 이용, C++11부터는 UTF-8 처리를 위해 `char8_t` 타입과 관련 라이브러리 활용 가능합니다.
---
요약하자면, C++에서는 문자열 처리에 std::string을 사용하는 것이 가장 일반적이며 안전합니다. 다양한 멤버 함수로 모든 문자열 조작 작업을 쉽게 할 수 있고, 필요에 따라 C 스타일 문자열과 상호 변환도 가능합니다.
작성자:
정주희 [비회원]
| 작성일자: 1년 전
2024-09-20 17:11:26
조회수: 166 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 166 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.