1

我的绳子真的很长!并且它之间有单词'post',我想使用'post'作为分隔符来标记字符串!我遇到了 boost 库,它使用 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这应该工作!在这种情况下,复杂性将是字符串中的“post”-分隔符的数量。让我知道你们是否有更好的运行时间

#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 回答