C++에서 문자열(String)을 분리하거나 어떤 문자를 기준으로 자르는 방법을 소개합니다.
1. substr()으로 문자열 자르기
substr()은 문자열의 Index에서 원하는 길이의 문자열을 잘라서 string으로 리턴합니다.
substr의 Syntax는 아래와 같습니다. 인자로 index와 길이를 받고 string을 리턴합니다.
string substr (size_t pos = 0, size_t len = npos) const;아래 예제는 문자열의 특정 부분을 자르는 코드입니다. substr(0, 5)는 Index 0에서 시작하는 5개의 문자를 잘라서 string으로 리턴합니다.
substr(6, 5)는 Index 6에서 길이 5의 문자열을 잘라서 리턴합니다.
#include <iostream>
#include <string>
int main () {
std::string str = "Hello World, C++";
std::string newstr1 = str.substr(0, 5);
std::string newstr2 = str.substr(6, 5);
std::string newstr3 = str.substr(13, 3);
std::cout << newstr1 << std::endl;
std::cout << newstr2 << std::endl;
std::cout << newstr3 << std::endl;
return 0;
}Output:
Hello
World
C++substring(6)처럼 Index만 인자로 전달하고 길이는 전달하지 않으면 문자열의 마지막까지 자릅니다.
아래와 같이 substr(6)은 Index 6에서 문자열의 마지막까지 잘라서 string으로 리턴합니다. substr(13)은 Index 13에서 문자열 마지막까지 잘라서 리턴합니다.
#include <iostream>
#include <string>
int main () {
std::string str="Hello World, C++";
std::string newstr1 = str.substr(6);
std::string newstr2 = str.substr(13);
std::cout << newstr1 << std::endl;
std::cout << newstr2 << std::endl;
return 0;
}Output:
World, C++
C++2. substr()과 find()로 문자열 분리하기
find(separator, index)는 인자로 전달된 Index에서 separator를 찾고 그 Index를 리턴합니다. separator가 없으면 npos를 리턴합니다.
아래 예제는 find()와 substr()을 이용하여 ,를 기준으로 문자열을 분리하는 예제입니다.
문자열 "Hello,World,C++"는 아래 코드에서 Hello, World, C++으로 분리됩니다.
동작 원리는 while 안에서 문자열의 :를 찾고 substr()으로 : 직전까지 문자열을 자르는 것입니다.
#include<iostream>
#include<string>
int main() {
std::string str = "Hello,World,C++";
std::string separator = ",";
int cur_position = 0;
int position;
while ((position = str.find(separator, cur_position)) != std::string::npos) {
int len = position - cur_position;
std::string result = str.substr(cur_position, len);
std::cout << result << std::endl;
cur_position = position + 1;
}
std::string result = str.substr(cur_position);
std::cout << result << std::endl;
}Output:
Hello
World
C++3. getline()과 istringstream으로 문자열 분리하기
getline()과 istringstream을 이용하여 위와 같이 구분자로 문자열을 분리할 수 있습니다.
문자열을 istringstream으로 변환하고, getline()을 통해 구분자를 기준으로 문자열을 읽어올 수 있습니다.
#include<iostream>
#include<string>
#include<sstream>
int main() {
std::string str = "Hello,World,C++";
char separator = ',';
std::istringstream iss(str);
std::string str_buf;
while (getline(iss, str_buf, separator)) {
std::cout << str_buf << std::endl;
}
return 0;
}Output:
Hello
World
C++Related Posts
- [C++] 배열을 리스트(list)로 변환
- [C++] 배열에서 특정 요소 제거
- [C++] vector 모든 요소의 합계 계산
- [C++] 배열에 특정 요소가 있는지 확인
- [C++] 두개의 배열이 같은지 비교
- [C++] 2차 배열 복사 방법
- [C++] 배열 복사하는 방법 (copy, memcpy)
- [C++] 함수의 인자로 배열 전달
- [C++] vector 모든 값의 평균 계산
- [C++] vector를 문자열로 변환
- [C++] 배열에서 요소의 Index 찾기
- [C++] 배열의 중복 요소 찾기
- [C++] 배열의 중복 요소 제거
- [C++] 배열 순서 거꾸로 뒤집기
- [C++] char 배열을 string으로 변환
- [C++] string을 char 배열로 변환
- [C++] 문자열 거꾸로 뒤집기
- [C++] vector의 중복 요소 제거
- [C++] 두 배열을 하나의 배열로 합치기
- [C++] 배열 길이, 크기 얻는 방법
- [C++] 배열에서 최대값, 최소값 찾기 (3가지 방법)
- [C++] int를 string으로 변환, 3가지 방법
- [C++] string의 문자 정렬
- [C++] 문자열 리스트(Vector, 배열) 정렬
- [C++] string을 int로 변환, 3가지 방법
- [C++] string 대문자/소문자 변환 방법
- [C++] string.compare() 문자열 비교
- [C++] int를 char로 변환, 3가지 방법
- [C++] 문자열 자르기, 3가지 방법
- [C++] isdigit(), 어떤 문자가 숫자인지 확인
- [C++] strlen(), 문자열 길이 계산
- [C++] strcmp(), strncmp() 함수로 문자열 비교
- [C++] strstr(), 특정 문자열 찾기