C++로 문자열을 split 하는 함수를 작성했다.
기준이 되는 delimiter는 char보다는 string으로 받아야 더 유연하게 사용할 수 있어서 string으로 받게 했다.
개행문자 처리
운영체제 별로 개행문자를 다르게 쓰기 때문에 파일에서 문자열을 읽어와서 개행문자 "\n" 기준으로 split을 했을 때 결과값이 올바르지 않은 문제가 있었다.
자세히 말하자면, 내가 처리하려던 파일은 개행문자를 CRLF ("\r\n") 으로 처리하고 있어서 "\n"으로 split을 하면 문자열 끝에 "\r"이 남아서 문자열 처리 시 문제가 있었다.
이 문제를 해결하기 위해 split 된 문자열에 끝에 "\r"이 있다면 제거하도록 처리했다.
vector<string> split(std::string str, std::string delimiter)
{
vector<string> ret;
size_t pos = 0;
std::string token;
do
{
pos = str.find(delimiter);
// delimiter를 못찾으면 텍스트 끝까지 token으로 취급
if (pos == std::string::npos)
{
token = str;
}
else
{
token = str.substr(0, pos);
}
// CRLF(\r\n) 처리
if (token[token.size() -1] == '\r')
{
token = token.substr(0, token.size() -1);
}
ret.push_back(token);
str.erase(0, pos + delimiter.length());
} while (pos != std::string::npos);
return ret;
}