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++] 문자열 리스트(Vector, 배열) 정렬
- [C++] string의 문자 정렬
- [C++] string을 int로 변환, 3가지 방법
- [C++] string 대문자/소문자 변환 방법
- [C++] string.compare() 문자열 비교
- [C++] int를 char로 변환, 3가지 방법
- [C++] 문자열 자르기, 3가지 방법
- [C++] isdigit(), 어떤 문자가 숫자인지 확인
- [C++] strlen(), 문자열 길이 계산
- [C++] strcmp(), strncmp() 함수로 문자열 비교
- [C++] strstr(), 특정 문자열 찾기