【C++】std::string 文字列分割 split関数作成

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;
}

スポンサーリンク

  • この記事を書いた人

まさじぃ

ダメプログラマ歴17年です。 プログラミング関連の事や、 自分で使って良かったもの等の紹介をメインにやっています。

-プログラミング
-