第11章練習問題10

  • 投稿日:
  • by
  • カテゴリ:

 第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)でループを作っている。明らかにこちらの方がいい。どうも、このあたりの私の悪い癖を直す必要がありそうだ。