第11章は、標準入出力をカスタマイズする方法である。ホワイトスペースを追加するというカスタマイズの手法は、C++言語らしい方法で非常に参考になった。
練習問題10は、以下の通り。
vector<string> split(const string& s)関数を記述する。この関数は、引数sをホワイトスペースに基づいて部分文字列に分割し、それらを格納したvectorを返す。
文字列ストリームを使う問題だろう、ということで、私の回答は、以下の通り。
#include "..\..\std_lib_facilities.h"
vector<string> split(const string& s) {
istringstream is{ s };
vector<string> svector;
string str;
while (true) {
is >> str;
if (is.eof()) return svector;
svector.push_back(str);
}
}
int main() {
vector<string> result;
string test = "This is test. ";
result = split(test);
for (int i = 0; i < result.size(); i++) cout << i << ":" << result[i] << endl;
return 0;
}
模範解答は、http://www.stroustrup.com/Programming/Solutions/Ch11/e11-9.cpp。私の回答は、eofを検出した時に、無限ループをreturnで抜けるという方法になっている。一夫、模範解答は、while (is>>buf)でループを作っている。明らかにこちらの方がいい。どうも、このあたりの私の悪い癖を直す必要がありそうだ。
コメント