1

私は本当に本当に長いような文字列を持っています! 間に「post」という単語があり、「post」を区切り文字として使用して文字列をトークン化したい! 私はブーストライブラリに出くわして、split_regexまたはそのようなものでそうしました! 誰かが本当に効率的な方法を知っているなら、私に知らせてください

-ありがとう

4

2 に答える 2

1

Boost String Algorithms Libraryを見ることができます

#include <string>
#include <vector>
#include <algorithm>
#include <iterator>
#include <iostream>
#include <boost/algorithm/string/iter_find.hpp>
#include <boost/algorithm/string/finder.hpp>
int main()
{
    std::string input = "msg1foomsg2foomsg3";

    std::vector<std::string> v;
    iter_split(v, input, boost::algorithm::first_finder("foo"));

    copy(v.begin(), v.end(), std::ostream_iterator<std::string>(std::cout, " "));
    std::cout << std:endl;
}
于 2013-02-06T00:59:52.677 に答える
0

pplこれはうまくいくはずです!複雑さは「ポスト」の数になります-この場合、文字列の区切り文字。あなたの人々がこれよりも良い実行時間を持っているかどうか教えてください

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;

void split(const string& str, const string& delimiter = "post") {
    vector <string> tokens;

    string::size_type lastPos = 0;
    string::size_type pos = str.find(delimiter, lastPos);

    while (string::npos != pos) {
        // Found a token, add it to the vector.
        cout << str.substr(lastPos, pos - lastPos) << endl;
        //tokens.push_back(str.substr(lastPos+4, pos - lastPos));
        lastPos = pos + delimiter.size();
        pos = str.find(delimiter, lastPos);
    }


}

int main() {
   split("wat post but post get post roast post");
}
于 2013-02-06T17:55:54.147 に答える