# 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++の練習ということで