c++でstd::stringを分割する方法のメモ
stringで文字列を定義した時に途中で分割する必要が出てきた。
例えば "8:3"という文字列を:で区切って8と3をそれぞれ取り出したい場合について考える。
調べるとそれっぽいページが出てきたのでやってみる。
どうやらstdには標準で文字列を分割する関数がないので自分で実装する必要があるらしい。以下コードコピペ
#include <vector> #include <string> #include <sstream> // std::ostringstream std::vector<std::string> StringSplit(const std::string &str, char sep) { std::vector<std::string> v; std::stringstream ss(str); std::string buffer; while( std::getline(ss, buffer, sep) ) { v.push_back(buffer); } return v; }
使ってみる。
vector<string> vkey = StringSplit("8:3",':');
const string str_key1= vkey[0];
const string str_key2= vkey[1];
とかやれば確かに8と3に分割できた。
中身で何をやってるのか
inputの文字列をstringstreamにつっこみ、ある文字sepまでの文字列を
getlineで引っ張ってくる。while文でsepより前とsepより後の文字列を
vectorに順番に突っ込んでvectorを返り値として返す、みたいなことをやってるはず。
getlineは第3引数(sep)が現れるまでの文字を出力する仕様みたい。
””と''て何が違うんだっけ?と思ったが、文字列は""だけど一文字の場合は''で囲めばいいんだった。忘れてた。
これで分割し放題だ!
【追記】
このままだと数字はstring型として扱われるので、int型とかに変換したかったら
stoi(str_key1)
とかすれば良い。