std::string型の文字列を文字や文字列で分解したい事って多いんですが、split関数が定義されなくて困ります。
文字で区切る場合と、文字列で区切る場合の2パターンを関数作成しておきます。
char型の区切り文字で分割する
char型の区切り文字で分割する場合は、std::getline関数を使用します。
#include <iostream>
#include <string>
#include <vector>
#include <sstream>
std::vector<std::string> split(std::string str, const char separator)
{
std::vector<std::string> out;
std::stringstream ss(str);
std::string buf;
while(std::getline(ss, buf, separator) {
out.push_back(buf);
}
return out;
}
std::string型の区切り文字列で分割する
std::string型の区切り文字列で分割する場合は、find関数を使用します。
#include <string>
#include <vector>
std::vector<std::string> split(std::string str, std::string separator)
{
std::vector<std::string> out;
int len = separator.length();
if (len == 0) {
out.push_back(str);
} else {
int offset = 0;
while (true) {
int pos = str.find(separator, offset);
if (pos < 0) {
out.push_back(str.substr(offset));
break;
}
out.push_back(str.substr(offset, pos - offset);
offset = pos + len;
}
}
return out;
}