C#에서는 string에서 split 멤버함수가 제공되어 손쉽게 자를 수 있었다.
그러나 C++에서는 split 함수가 존재하지 않는다.
문자열을 주어진 문자 delimiter로 자르는 데에 여러 방법이 있지만,
가장 간단한 방법은 std::stringstream을 사용하는 방법.
std::stringstream
<sstream> 헤더에 존재하는 std::stringstream은 여러 문자열을 이어 붙이는 기능도 있지만
문자열을 주어진 delimiter대로 자르는 기능도 제공한다.
<string> 헤더의 std::getline을 사용하여 문자열을 자를 수 있다.
bool 리턴값으로 문자열 존재여부를 알 수 있으니 while문과 같이 사용하자.
첫 번째 인자로 streamstream 객체
두 번째 인자로 문자를 담을 임시 string
세 번째 인자로 자를 문자의 delimiter
#include <iostream>
#include <sstream>
#include <vector>
#include <string>
std::vector<std::string> split(const std::string& str, char delimiter) {
std::vector<std::string> splited;
std::stringstream ss(str);
std::string temp;
while (std::getline(ss, temp, delimiter)) {
splited.push_back(temp);
}
return splited;
}
stringstream은 >> 연산자를 사용해서 getline을 바로 사용할 수 또 있다.
이 경우에는 delimiter 가 기본적으로 공백으로 사용된다. (스페이스, 탭, 줄 바꿈)
다른 문자로 바꿀 수 없으며, 바꾸고 싶다면 std::getline을 사용해야만한다.
while (ss >> temp)
{
answer.push_back(temp);
}
int형 또는 char 형으로 받을 수 있다.
string binomial = "35 + 34";
int a,b;
char op;
stringstream ss;
ss.str(binomial);
ss >> a >> op >> b;
참고! getline은 cin과도 사용할 수 있다.
void Code::main()
{
string temp;
char delimiter = '\n';
while (getline(cin, temp, delimiter))
{
cout << temp << '\n';
}
}
'🌍 C++ Study > C++ 기초' 카테고리의 다른 글
C++ std::unique 중복 요소 제거 (0) | 2024.11.26 |
---|---|
C++ 문자열 소문자, 대문자로 바꾸기 tolower (0) | 2024.11.23 |
C++ 부분 문자열 찾기std::string::find (0) | 2024.11.23 |
C++ std::transform 각 원소에 연산하기, vector 2배하기 (0) | 2024.11.21 |
C++ 역방향 반복자 rbegin() / rend() / base() (0) | 2024.11.20 |