Neunomizuの日記

俺だけが俺だけじゃない

# C++でSplit関数もどき

tags: 情報

Pythonのsplitメソッド

Pythonにはsplitという組み込みメソッドがあり, これを使うことで指定した区切り文字で文字列を区切ることが出来ます

例えば

txt = "eeic is wonderful"

x = txt.split()

print(x) # ['eeic', 'is', wonderful]

このようにデフォルトでは区切り文字が(空白)になっていてこれによって区切られた文字列をリストに入れて返します

split的な関数

似たような関数をC++で書いてみようかなと思って書いたのが以下の通り

#include <iostream>
#include <string>
#include <vector>

void split(std::vector<std::string>&, std::string&, char);

int main(void) {
  std::vector<std::string> res;
  std::string input;
  char splitter;
  std::cin >> input >> splitter;
  split(res, input, splitter);
  for (auto& str : res) {
    std::cout << str << "\n";
  }
  return 0;
}

void split(std::vector<std::string>& strContainer, std::string& inputStr,
           char splitter = ' ') {
  std::string cur_str = "";
  for (char& ch : inputStr) {
    if (ch == splitter) {
      strContainer.push_back(cur_str);
      cur_str = "";
    } else {
      cur_str += ch;
    }
  }
  if (inputStr.back() != splitter) strContainer.push_back(cur_str);
}

split関数は引数に「文字列を格納する配列」, 「分割する文字列」, 「区切り文字」を取り, 分割した文字列を返り値とはせずそのまま引数の配列に入れるという風にしました

実行するとこんな感じです(ファイル名はsplit.ccとして)

$ g++ -o split split.cc
$ ./split
eeic,is,wonderful
,
eeic
is
wonderful

もっとスマートに書けないものかなと思いましたが, C++の練習ということで

github.com